@agents-inc/cli 0.64.0 → 0.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/{chunk-J4POGAJF.js → chunk-2JJUPWE5.js} +2 -2
  3. package/dist/{chunk-53URJ5XK.js → chunk-45R64U2S.js} +21 -21
  4. package/dist/chunk-45R64U2S.js.map +1 -0
  5. package/dist/{chunk-FGLUQSVU.js → chunk-6BXKF5GP.js} +2 -2
  6. package/dist/{chunk-EZ35IPXZ.js → chunk-7LCI5PSJ.js} +2 -2
  7. package/dist/{chunk-4C7CSZC5.js → chunk-EULHBV5V.js} +3 -3
  8. package/dist/{chunk-ZFY5EMDV.js → chunk-F6KEZ4Y5.js} +4 -4
  9. package/dist/{chunk-EE5EPS32.js → chunk-FCF4WQEI.js} +2 -2
  10. package/dist/{chunk-R46CB36B.js → chunk-GK5CAS3A.js} +4 -4
  11. package/dist/{chunk-WSMQ5GAP.js → chunk-HADHP7XF.js} +3 -3
  12. package/dist/{chunk-OORWBS6F.js → chunk-JAWXWNIX.js} +16 -10
  13. package/dist/chunk-JAWXWNIX.js.map +1 -0
  14. package/dist/{chunk-3YNT3NX3.js → chunk-KBG7GYPL.js} +5 -5
  15. package/dist/{chunk-O2HK3NTG.js → chunk-KMDBOO3E.js} +2 -2
  16. package/dist/{chunk-EC3UJRKZ.js → chunk-KWB3B2HS.js} +92 -163
  17. package/dist/chunk-KWB3B2HS.js.map +1 -0
  18. package/dist/{chunk-7DI3HGKL.js → chunk-KYULKBFC.js} +2 -2
  19. package/dist/chunk-KYULKBFC.js.map +1 -0
  20. package/dist/{chunk-6DEK3TDF.js → chunk-L5LD3ZSR.js} +4 -4
  21. package/dist/{chunk-F3REOP7N.js → chunk-L6MTIQ2U.js} +2 -2
  22. package/dist/{chunk-MOMI77PL.js → chunk-N4D43IOO.js} +57 -137
  23. package/dist/chunk-N4D43IOO.js.map +1 -0
  24. package/dist/{chunk-RG3KDXMR.js → chunk-QUEO6QEL.js} +3 -3
  25. package/dist/{chunk-LMZXL5RQ.js → chunk-R3AR4VLZ.js} +11 -11
  26. package/dist/chunk-R3AR4VLZ.js.map +1 -0
  27. package/dist/{chunk-4KVBH2X4.js → chunk-RMMHVE2R.js} +3 -3
  28. package/dist/{chunk-YEGPTBX5.js → chunk-SSGPFKS4.js} +3 -3
  29. package/dist/{chunk-BGPGQF35.js → chunk-VTRVAXUM.js} +3 -3
  30. package/dist/commands/build/marketplace.js +3 -3
  31. package/dist/commands/build/plugins.js +6 -6
  32. package/dist/commands/build/stack.js +6 -6
  33. package/dist/commands/compile.js +6 -6
  34. package/dist/commands/config/index.js +6 -6
  35. package/dist/commands/config/path.js +5 -5
  36. package/dist/commands/config/show.js +6 -6
  37. package/dist/commands/diff.js +5 -5
  38. package/dist/commands/doctor.js +5 -5
  39. package/dist/commands/edit.js +40 -20
  40. package/dist/commands/edit.js.map +1 -1
  41. package/dist/commands/eject.js +5 -5
  42. package/dist/commands/import/skill.js +5 -5
  43. package/dist/commands/info.js +5 -5
  44. package/dist/commands/init.js +17 -17
  45. package/dist/commands/list.js +5 -5
  46. package/dist/commands/new/agent.js +6 -6
  47. package/dist/commands/new/marketplace.js +7 -7
  48. package/dist/commands/new/skill.js +6 -6
  49. package/dist/commands/outdated.js +5 -5
  50. package/dist/commands/search.js +5 -5
  51. package/dist/commands/uninstall.js +5 -5
  52. package/dist/commands/update.js +6 -6
  53. package/dist/commands/validate.js +5 -5
  54. package/dist/components/wizard/category-grid.test.js +11 -11
  55. package/dist/components/wizard/category-grid.test.js.map +1 -1
  56. package/dist/components/wizard/domain-selection.js +6 -6
  57. package/dist/components/wizard/help-modal.js +1 -1
  58. package/dist/components/wizard/search-modal.test.js.map +1 -1
  59. package/dist/components/wizard/source-grid.test.js +8 -13
  60. package/dist/components/wizard/source-grid.test.js.map +1 -1
  61. package/dist/components/wizard/stack-selection.js +6 -6
  62. package/dist/components/wizard/step-agents.js +6 -6
  63. package/dist/components/wizard/step-agents.test.js +8 -8
  64. package/dist/components/wizard/step-agents.test.js.map +1 -1
  65. package/dist/components/wizard/step-build.js +6 -6
  66. package/dist/components/wizard/step-build.test.js +62 -76
  67. package/dist/components/wizard/step-build.test.js.map +1 -1
  68. package/dist/components/wizard/step-confirm.test.js +6 -6
  69. package/dist/components/wizard/step-settings.js +5 -5
  70. package/dist/components/wizard/step-settings.test.js +8 -8
  71. package/dist/components/wizard/step-sources.js +6 -6
  72. package/dist/components/wizard/step-sources.test.js +10 -9
  73. package/dist/components/wizard/step-sources.test.js.map +1 -1
  74. package/dist/components/wizard/step-stack.js +8 -8
  75. package/dist/components/wizard/step-stack.test.js +20 -30
  76. package/dist/components/wizard/step-stack.test.js.map +1 -1
  77. package/dist/components/wizard/wizard-layout.js +7 -7
  78. package/dist/components/wizard/wizard.js +15 -15
  79. package/dist/config-exports.js +1 -1
  80. package/dist/hooks/init.js +17 -17
  81. package/dist/{loader-4YOZCFIP.js → loader-CMSC3RAO.js} +3 -3
  82. package/dist/{source-loader-O5RMYUBW.js → source-loader-YMWWZFVD.js} +5 -5
  83. package/dist/{source-manager-NKLL6HCL.js → source-manager-6G3EVTU2.js} +5 -5
  84. package/dist/stores/matrix-store.test.js +23 -46
  85. package/dist/stores/matrix-store.test.js.map +1 -1
  86. package/dist/stores/wizard-store.js +5 -5
  87. package/dist/stores/wizard-store.test.js +39 -54
  88. package/dist/stores/wizard-store.test.js.map +1 -1
  89. package/package.json +1 -1
  90. package/src/schemas/metadata.schema.json +1 -1
  91. package/dist/chunk-53URJ5XK.js.map +0 -1
  92. package/dist/chunk-7DI3HGKL.js.map +0 -1
  93. package/dist/chunk-EC3UJRKZ.js.map +0 -1
  94. package/dist/chunk-LMZXL5RQ.js.map +0 -1
  95. package/dist/chunk-MOMI77PL.js.map +0 -1
  96. package/dist/chunk-OORWBS6F.js.map +0 -1
  97. /package/dist/{chunk-J4POGAJF.js.map → chunk-2JJUPWE5.js.map} +0 -0
  98. /package/dist/{chunk-FGLUQSVU.js.map → chunk-6BXKF5GP.js.map} +0 -0
  99. /package/dist/{chunk-EZ35IPXZ.js.map → chunk-7LCI5PSJ.js.map} +0 -0
  100. /package/dist/{chunk-4C7CSZC5.js.map → chunk-EULHBV5V.js.map} +0 -0
  101. /package/dist/{chunk-ZFY5EMDV.js.map → chunk-F6KEZ4Y5.js.map} +0 -0
  102. /package/dist/{chunk-EE5EPS32.js.map → chunk-FCF4WQEI.js.map} +0 -0
  103. /package/dist/{chunk-R46CB36B.js.map → chunk-GK5CAS3A.js.map} +0 -0
  104. /package/dist/{chunk-WSMQ5GAP.js.map → chunk-HADHP7XF.js.map} +0 -0
  105. /package/dist/{chunk-3YNT3NX3.js.map → chunk-KBG7GYPL.js.map} +0 -0
  106. /package/dist/{chunk-O2HK3NTG.js.map → chunk-KMDBOO3E.js.map} +0 -0
  107. /package/dist/{chunk-6DEK3TDF.js.map → chunk-L5LD3ZSR.js.map} +0 -0
  108. /package/dist/{chunk-F3REOP7N.js.map → chunk-L6MTIQ2U.js.map} +0 -0
  109. /package/dist/{chunk-RG3KDXMR.js.map → chunk-QUEO6QEL.js.map} +0 -0
  110. /package/dist/{chunk-4KVBH2X4.js.map → chunk-RMMHVE2R.js.map} +0 -0
  111. /package/dist/{chunk-YEGPTBX5.js.map → chunk-SSGPFKS4.js.map} +0 -0
  112. /package/dist/{chunk-BGPGQF35.js.map → chunk-VTRVAXUM.js.map} +0 -0
  113. /package/dist/{loader-4YOZCFIP.js.map → loader-CMSC3RAO.js.map} +0 -0
  114. /package/dist/{source-loader-O5RMYUBW.js.map → source-loader-YMWWZFVD.js.map} +0 -0
  115. /package/dist/{source-manager-NKLL6HCL.js.map → source-manager-6G3EVTU2.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/components/wizard/step-stack.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { StepStack } from \"./step-stack\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport { useMatrixStore } from \"../../stores/matrix-store\";\nimport {\n createMockCategory,\n createMockMatrix,\n createMockResolvedStack,\n TEST_SKILLS,\n} from \"../../lib/__tests__/helpers\";\n\nimport type { MergedSkillsMatrix } from \"../../types\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n SELECT_NAV_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst createMockStackWithSkills = (): MergedSkillsMatrix => {\n const skills = {\n [\"web-framework-react\"]: TEST_SKILLS.react,\n [\"web-state-zustand\"]: TEST_SKILLS.zustand,\n [\"api-framework-hono\"]: TEST_SKILLS.hono,\n };\n\n const suggestedStacks = [\n createMockResolvedStack(\"react-fullstack\", \"React Fullstack\", {\n description: \"Full React stack with Zustand and Hono\",\n allSkillIds: [\"web-framework-react\", \"web-state-zustand\", \"api-framework-hono\"],\n }),\n createMockResolvedStack(\"react-minimal\", \"React Minimal\", {\n allSkillIds: [\"web-framework-react\"],\n }),\n ];\n\n return createMockMatrix(skills, {\n suggestedStacks,\n categories: {\n \"web-framework\": createMockCategory(\"web-framework\", \"Web Framework\", {\n domain: \"web\",\n exclusive: false,\n }),\n \"api-api\": createMockCategory(\"api-api\", \"API Framework\", {\n domain: \"api\",\n exclusive: false,\n order: 1,\n }),\n \"cli-framework\": createMockCategory(\"cli-framework\", \"CLI Framework\", {\n domain: \"cli\",\n exclusive: false,\n order: 2,\n }),\n \"mobile-framework\": createMockCategory(\"mobile-framework\", \"Mobile Framework\", {\n domain: \"mobile\",\n exclusive: false,\n order: 3,\n }),\n },\n });\n};\n\ndescribe(\"StepStack component\", () => {\n let cleanup: (() => void) | undefined;\n let mockMatrix: MergedSkillsMatrix;\n\n beforeEach(() => {\n mockMatrix = createMockStackWithSkills();\n useMatrixStore.getState().setMatrix(mockMatrix);\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"unified stack/scratch selection (initial view)\", () => {\n describe(\"rendering\", () => {\n it(\"should render stack options and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"React Fullstack\");\n expect(output).toContain(\"React Minimal\");\n expect(output).toContain(\"Start from scratch\");\n });\n\n it(\"should render focused stack description (only focused item shows description)\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Full React stack\");\n });\n\n it(\"should render ViewTitle for stack selection\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n\n it(\"should render divider between stacks and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"\\u2500\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select first stack on Enter and show domain selection\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n expect(selectedStackId).toBe(\"react-fullstack\");\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should select second stack when navigated to\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n });\n\n describe(\"scratch selection\", () => {\n it(\"should show domain selection when scratch is selected\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n expect(selectedStackId).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should pre-select domains except CLI when scratch is chosen\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n expect(selectedDomains).toContain(\"mobile\");\n expect(selectedDomains).not.toContain(\"cli\");\n });\n });\n\n describe(\"cancel navigation\", () => {\n it(\"should call onCancel when pressing Escape at initial view\", async () => {\n const onCancel = vi.fn();\n const { stdin, unmount } = render(<StepStack onCancel={onCancel} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(onCancel).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"arrow key navigation\", () => {\n it(\"should navigate down to second stack card\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n\n it(\"should navigate down then up back to first stack\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at top boundary\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at bottom boundary (scratch is last)\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"empty state\", () => {\n it(\"should still show scratch option with no stacks available\", () => {\n const emptyMatrix = createMockMatrix({}, { suggestedStacks: [] });\n useMatrixStore.getState().setMatrix(emptyMatrix);\n\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n expect(output).toContain(\"Start from scratch\");\n });\n });\n });\n\n describe(\"domain selection mode (after stack/scratch choice)\", () => {\n beforeEach(() => {\n useWizardStore.getState().setApproach(\"scratch\");\n });\n\n describe(\"rendering\", () => {\n it(\"should render domain options\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web\");\n expect(output).toContain(\"API\");\n expect(output).toContain(\"CLI\");\n });\n\n it(\"should render header text for domain selection\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should show domain descriptions\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n // Only the focused item (Web, first in list) shows its description\n expect(output).toContain(\"Frontend web applications\");\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain when selected\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default, toggle with space\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(useWizardStore.getState().selectedDomains).toContain(\"web\");\n\n useWizardStore.getState().toggleDomain(\"api\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n });\n\n it(\"should show selected domains summary when domains selected\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"web\");\n });\n\n it(\"should navigate to build step when continuing\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Navigate to continue option (after 4 domains)\n for (let i = 0; i < 4; i++) {\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n }\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n });\n });\n\n describe(\"back navigation\", () => {\n it(\"should return to stack/scratch selection when pressing ESC\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n });\n });\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/step-stack.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { StepStack } from \"./step-stack\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport { useMatrixStore } from \"../../stores/matrix-store\";\nimport { createMockMatrix, createMockResolvedStack, SKILLS } from \"../../lib/__tests__/helpers\";\nimport { TEST_CATEGORIES } from \"../../lib/__tests__/test-fixtures\";\n\nimport type { MergedSkillsMatrix } from \"../../types\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n SELECT_NAV_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst createMockStackWithSkills = (): MergedSkillsMatrix => {\n const suggestedStacks = [\n createMockResolvedStack(\"react-fullstack\", \"React Fullstack\", {\n description: \"Full React stack with Zustand and Hono\",\n allSkillIds: [\"web-framework-react\", \"web-state-zustand\", \"api-framework-hono\"],\n }),\n createMockResolvedStack(\"react-minimal\", \"React Minimal\", {\n allSkillIds: [\"web-framework-react\"],\n }),\n ];\n\n return createMockMatrix(SKILLS.react, SKILLS.zustand, SKILLS.hono, {\n suggestedStacks,\n categories: {\n \"web-framework\": { ...TEST_CATEGORIES.framework, domain: \"web\" as const, exclusive: false },\n \"api-api\": { ...TEST_CATEGORIES.api, domain: \"api\" as const, exclusive: false, order: 1 },\n \"cli-framework\": {\n ...TEST_CATEGORIES.cliFramework,\n domain: \"cli\" as const,\n exclusive: false,\n order: 2,\n },\n \"mobile-framework\": {\n ...TEST_CATEGORIES.mobileFramework,\n domain: \"mobile\" as const,\n exclusive: false,\n order: 3,\n },\n },\n });\n};\n\ndescribe(\"StepStack component\", () => {\n let cleanup: (() => void) | undefined;\n let mockMatrix: MergedSkillsMatrix;\n\n beforeEach(() => {\n mockMatrix = createMockStackWithSkills();\n useMatrixStore.getState().setMatrix(mockMatrix);\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"unified stack/scratch selection (initial view)\", () => {\n describe(\"rendering\", () => {\n it(\"should render stack options and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"React Fullstack\");\n expect(output).toContain(\"React Minimal\");\n expect(output).toContain(\"Start from scratch\");\n });\n\n it(\"should render focused stack description (only focused item shows description)\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Full React stack\");\n });\n\n it(\"should render ViewTitle for stack selection\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n\n it(\"should render divider between stacks and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"\\u2500\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select first stack on Enter and show domain selection\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n expect(selectedStackId).toBe(\"react-fullstack\");\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should select second stack when navigated to\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n });\n\n describe(\"scratch selection\", () => {\n it(\"should show domain selection when scratch is selected\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n expect(selectedStackId).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should pre-select domains except CLI when scratch is chosen\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n expect(selectedDomains).toContain(\"mobile\");\n expect(selectedDomains).not.toContain(\"cli\");\n });\n });\n\n describe(\"cancel navigation\", () => {\n it(\"should call onCancel when pressing Escape at initial view\", async () => {\n const onCancel = vi.fn();\n const { stdin, unmount } = render(<StepStack onCancel={onCancel} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(onCancel).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"arrow key navigation\", () => {\n it(\"should navigate down to second stack card\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n\n it(\"should navigate down then up back to first stack\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at top boundary\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at bottom boundary (scratch is last)\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"empty state\", () => {\n it(\"should still show scratch option with no stacks available\", () => {\n const emptyMatrix = createMockMatrix({}, { suggestedStacks: [] });\n useMatrixStore.getState().setMatrix(emptyMatrix);\n\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n expect(output).toContain(\"Start from scratch\");\n });\n });\n });\n\n describe(\"domain selection mode (after stack/scratch choice)\", () => {\n beforeEach(() => {\n useWizardStore.getState().setApproach(\"scratch\");\n });\n\n describe(\"rendering\", () => {\n it(\"should render domain options\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web\");\n expect(output).toContain(\"API\");\n expect(output).toContain(\"CLI\");\n });\n\n it(\"should render header text for domain selection\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should show domain descriptions\", () => {\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n // Only the focused item (Web, first in list) shows its description\n expect(output).toContain(\"Frontend web applications\");\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain when selected\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default, toggle with space\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", async () => {\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(useWizardStore.getState().selectedDomains).toContain(\"web\");\n\n useWizardStore.getState().toggleDomain(\"api\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n });\n\n it(\"should show selected domains summary when domains selected\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"web\");\n });\n\n it(\"should navigate to build step when continuing\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { stdin, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Navigate to continue option (after 4 domains)\n for (let i = 0; i < 4; i++) {\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n }\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n });\n });\n\n describe(\"back navigation\", () => {\n it(\"should return to stack/scratch selection when pressing ESC\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "../../chunk-4KVBH2X4.js";
4
+ } from "../../chunk-RMMHVE2R.js";
5
5
  import "../../chunk-SXGBPQY6.js";
6
6
  import "../../chunk-HGTC76BX.js";
7
- import "../../chunk-7DI3HGKL.js";
8
- import "../../chunk-4C7CSZC5.js";
7
+ import "../../chunk-KYULKBFC.js";
8
+ import "../../chunk-EULHBV5V.js";
9
9
  import "../../chunk-6VIOO74O.js";
10
- import "../../chunk-53URJ5XK.js";
11
- import "../../chunk-F3REOP7N.js";
10
+ import "../../chunk-45R64U2S.js";
11
+ import "../../chunk-L6MTIQ2U.js";
12
12
  import "../../chunk-T4EXUIBY.js";
13
13
  import "../../chunk-BKL3DF2Q.js";
14
- import "../../chunk-LMZXL5RQ.js";
14
+ import "../../chunk-R3AR4VLZ.js";
15
15
  import "../../chunk-EGMQ3SXN.js";
16
- import "../../chunk-EC3UJRKZ.js";
16
+ import "../../chunk-KWB3B2HS.js";
17
17
  import "../../chunk-DHET7RCE.js";
18
18
  export {
19
19
  WizardLayout
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "../../chunk-OORWBS6F.js";
5
- import "../../chunk-4KVBH2X4.js";
4
+ } from "../../chunk-JAWXWNIX.js";
5
+ import "../../chunk-RMMHVE2R.js";
6
6
  import "../../chunk-SXGBPQY6.js";
7
- import "../../chunk-RG3KDXMR.js";
8
- import "../../chunk-WSMQ5GAP.js";
7
+ import "../../chunk-QUEO6QEL.js";
8
+ import "../../chunk-HADHP7XF.js";
9
9
  import "../../chunk-HGTC76BX.js";
10
- import "../../chunk-6DEK3TDF.js";
11
- import "../../chunk-EZ35IPXZ.js";
12
- import "../../chunk-J4POGAJF.js";
13
- import "../../chunk-BGPGQF35.js";
10
+ import "../../chunk-L5LD3ZSR.js";
11
+ import "../../chunk-7LCI5PSJ.js";
12
+ import "../../chunk-2JJUPWE5.js";
13
+ import "../../chunk-VTRVAXUM.js";
14
14
  import "../../chunk-K77I4XGL.js";
15
15
  import "../../chunk-52THXN5G.js";
16
- import "../../chunk-7DI3HGKL.js";
16
+ import "../../chunk-KYULKBFC.js";
17
17
  import "../../chunk-MWGDG4QN.js";
18
18
  import "../../chunk-KFDTVSIC.js";
19
19
  import "../../chunk-7SOPVGDV.js";
@@ -21,23 +21,23 @@ import "../../chunk-6IK2TCK7.js";
21
21
  import "../../chunk-KUV24B5M.js";
22
22
  import "../../chunk-CKPJTMNC.js";
23
23
  import "../../chunk-GG4BSB6S.js";
24
- import "../../chunk-O2HK3NTG.js";
24
+ import "../../chunk-KMDBOO3E.js";
25
25
  import "../../chunk-ZYUASJUN.js";
26
26
  import "../../chunk-OV5UJWS5.js";
27
27
  import "../../chunk-XMLCXRTS.js";
28
28
  import "../../chunk-AQYAVLZK.js";
29
29
  import "../../chunk-AUNBGZS4.js";
30
- import "../../chunk-4C7CSZC5.js";
30
+ import "../../chunk-EULHBV5V.js";
31
31
  import "../../chunk-T5DJCIUP.js";
32
32
  import "../../chunk-U3IGFMCY.js";
33
33
  import "../../chunk-6VIOO74O.js";
34
- import "../../chunk-53URJ5XK.js";
35
- import "../../chunk-F3REOP7N.js";
34
+ import "../../chunk-45R64U2S.js";
35
+ import "../../chunk-L6MTIQ2U.js";
36
36
  import "../../chunk-T4EXUIBY.js";
37
37
  import "../../chunk-BKL3DF2Q.js";
38
- import "../../chunk-LMZXL5RQ.js";
38
+ import "../../chunk-R3AR4VLZ.js";
39
39
  import "../../chunk-EGMQ3SXN.js";
40
- import "../../chunk-EC3UJRKZ.js";
40
+ import "../../chunk-KWB3B2HS.js";
41
41
  import "../../chunk-DHET7RCE.js";
42
42
  export {
43
43
  Wizard
@@ -4,7 +4,7 @@ import {
4
4
  defaultRules,
5
5
  defaultStacks,
6
6
  defineConfig
7
- } from "./chunk-EC3UJRKZ.js";
7
+ } from "./chunk-KWB3B2HS.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-DHET7RCE.js";
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  showDashboard
4
- } from "../chunk-3YNT3NX3.js";
5
- import "../chunk-OORWBS6F.js";
6
- import "../chunk-4KVBH2X4.js";
4
+ } from "../chunk-KBG7GYPL.js";
5
+ import "../chunk-JAWXWNIX.js";
6
+ import "../chunk-RMMHVE2R.js";
7
7
  import "../chunk-SXGBPQY6.js";
8
- import "../chunk-RG3KDXMR.js";
9
- import "../chunk-WSMQ5GAP.js";
8
+ import "../chunk-QUEO6QEL.js";
9
+ import "../chunk-HADHP7XF.js";
10
10
  import "../chunk-HGTC76BX.js";
11
- import "../chunk-6DEK3TDF.js";
12
- import "../chunk-EZ35IPXZ.js";
13
- import "../chunk-J4POGAJF.js";
14
- import "../chunk-BGPGQF35.js";
11
+ import "../chunk-L5LD3ZSR.js";
12
+ import "../chunk-7LCI5PSJ.js";
13
+ import "../chunk-2JJUPWE5.js";
14
+ import "../chunk-VTRVAXUM.js";
15
15
  import "../chunk-K77I4XGL.js";
16
16
  import "../chunk-52THXN5G.js";
17
- import "../chunk-7DI3HGKL.js";
17
+ import "../chunk-KYULKBFC.js";
18
18
  import "../chunk-MWGDG4QN.js";
19
19
  import "../chunk-KFDTVSIC.js";
20
20
  import "../chunk-7SOPVGDV.js";
@@ -22,13 +22,13 @@ import "../chunk-6IK2TCK7.js";
22
22
  import "../chunk-KUV24B5M.js";
23
23
  import "../chunk-CKPJTMNC.js";
24
24
  import "../chunk-GG4BSB6S.js";
25
- import "../chunk-O2HK3NTG.js";
25
+ import "../chunk-KMDBOO3E.js";
26
26
  import "../chunk-ZYUASJUN.js";
27
27
  import "../chunk-OV5UJWS5.js";
28
28
  import "../chunk-XMLCXRTS.js";
29
29
  import "../chunk-AQYAVLZK.js";
30
30
  import "../chunk-AUNBGZS4.js";
31
- import "../chunk-4C7CSZC5.js";
31
+ import "../chunk-EULHBV5V.js";
32
32
  import "../chunk-T5DJCIUP.js";
33
33
  import "../chunk-U3IGFMCY.js";
34
34
  import "../chunk-6VIOO74O.js";
@@ -37,16 +37,16 @@ import {
37
37
  detectInstallation,
38
38
  hasIndividualPlugins,
39
39
  resolveSource
40
- } from "../chunk-53URJ5XK.js";
41
- import "../chunk-F3REOP7N.js";
40
+ } from "../chunk-45R64U2S.js";
41
+ import "../chunk-L6MTIQ2U.js";
42
42
  import "../chunk-T4EXUIBY.js";
43
43
  import "../chunk-BKL3DF2Q.js";
44
44
  import {
45
45
  EXIT_CODES
46
- } from "../chunk-EE5EPS32.js";
47
- import "../chunk-LMZXL5RQ.js";
46
+ } from "../chunk-FCF4WQEI.js";
47
+ import "../chunk-R3AR4VLZ.js";
48
48
  import "../chunk-EGMQ3SXN.js";
49
- import "../chunk-EC3UJRKZ.js";
49
+ import "../chunk-KWB3B2HS.js";
50
50
  import {
51
51
  init_esm_shims
52
52
  } from "../chunk-DHET7RCE.js";
@@ -5,8 +5,8 @@ import {
5
5
  loadProjectAgents,
6
6
  loadSkillsByIds,
7
7
  parseFrontmatter
8
- } from "./chunk-F3REOP7N.js";
9
- import "./chunk-LMZXL5RQ.js";
8
+ } from "./chunk-L6MTIQ2U.js";
9
+ import "./chunk-R3AR4VLZ.js";
10
10
  import "./chunk-EGMQ3SXN.js";
11
11
  import "./chunk-DHET7RCE.js";
12
12
  export {
@@ -16,4 +16,4 @@ export {
16
16
  loadSkillsByIds,
17
17
  parseFrontmatter
18
18
  };
19
- //# sourceMappingURL=loader-4YOZCFIP.js.map
19
+ //# sourceMappingURL=loader-CMSC3RAO.js.map
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  getMarketplaceLabel,
4
4
  loadSkillsMatrixFromSource
5
- } from "./chunk-53URJ5XK.js";
6
- import "./chunk-F3REOP7N.js";
5
+ } from "./chunk-45R64U2S.js";
6
+ import "./chunk-L6MTIQ2U.js";
7
7
  import "./chunk-T4EXUIBY.js";
8
8
  import "./chunk-BKL3DF2Q.js";
9
- import "./chunk-LMZXL5RQ.js";
9
+ import "./chunk-R3AR4VLZ.js";
10
10
  import "./chunk-EGMQ3SXN.js";
11
- import "./chunk-EC3UJRKZ.js";
11
+ import "./chunk-KWB3B2HS.js";
12
12
  import "./chunk-DHET7RCE.js";
13
13
  export {
14
14
  getMarketplaceLabel,
15
15
  loadSkillsMatrixFromSource
16
16
  };
17
- //# sourceMappingURL=source-loader-O5RMYUBW.js.map
17
+ //# sourceMappingURL=source-loader-YMWWZFVD.js.map
@@ -3,17 +3,17 @@ import {
3
3
  addSource,
4
4
  getSourceSummary,
5
5
  removeSource
6
- } from "./chunk-53URJ5XK.js";
7
- import "./chunk-F3REOP7N.js";
6
+ } from "./chunk-45R64U2S.js";
7
+ import "./chunk-L6MTIQ2U.js";
8
8
  import "./chunk-T4EXUIBY.js";
9
9
  import "./chunk-BKL3DF2Q.js";
10
- import "./chunk-LMZXL5RQ.js";
10
+ import "./chunk-R3AR4VLZ.js";
11
11
  import "./chunk-EGMQ3SXN.js";
12
- import "./chunk-EC3UJRKZ.js";
12
+ import "./chunk-KWB3B2HS.js";
13
13
  import "./chunk-DHET7RCE.js";
14
14
  export {
15
15
  addSource,
16
16
  getSourceSummary,
17
17
  removeSource
18
18
  };
19
- //# sourceMappingURL=source-manager-NKLL6HCL.js.map
19
+ //# sourceMappingURL=source-manager-6G3EVTU2.js.map
@@ -1,17 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- TEST_SKILLS,
4
- createMockMatrix,
5
- createMockSkill
6
- } from "../chunk-MOMI77PL.js";
3
+ SKILLS,
4
+ createMockMatrix
5
+ } from "../chunk-N4D43IOO.js";
7
6
  import {
8
7
  describe,
9
8
  globalExpect,
10
9
  it
11
10
  } from "../chunk-XY3XDVMI.js";
12
- import "../chunk-4C7CSZC5.js";
13
- import "../chunk-53URJ5XK.js";
14
- import "../chunk-F3REOP7N.js";
11
+ import "../chunk-EULHBV5V.js";
12
+ import "../chunk-45R64U2S.js";
13
+ import "../chunk-L6MTIQ2U.js";
15
14
  import "../chunk-T4EXUIBY.js";
16
15
  import {
17
16
  findSkill,
@@ -19,9 +18,9 @@ import {
19
18
  getSkill,
20
19
  useMatrixStore
21
20
  } from "../chunk-BKL3DF2Q.js";
22
- import "../chunk-LMZXL5RQ.js";
21
+ import "../chunk-R3AR4VLZ.js";
23
22
  import "../chunk-EGMQ3SXN.js";
24
- import "../chunk-EC3UJRKZ.js";
23
+ import "../chunk-KWB3B2HS.js";
25
24
  import {
26
25
  init_esm_shims
27
26
  } from "../chunk-DHET7RCE.js";
@@ -31,9 +30,7 @@ init_esm_shims();
31
30
  describe("MatrixStore", () => {
32
31
  describe("setMatrix and getMatrix", () => {
33
32
  it("should store and retrieve the matrix", () => {
34
- const matrix = createMockMatrix({
35
- "web-framework-react": TEST_SKILLS.react
36
- });
33
+ const matrix = createMockMatrix(SKILLS.react);
37
34
  useMatrixStore.getState().setMatrix(matrix);
38
35
  const retrieved = useMatrixStore.getState().getMatrix();
39
36
  globalExpect(retrieved).toBe(matrix);
@@ -41,9 +38,7 @@ describe("MatrixStore", () => {
41
38
  });
42
39
  describe("reset", () => {
43
40
  it("should clear the matrix back to null", () => {
44
- const matrix = createMockMatrix({
45
- "web-framework-react": TEST_SKILLS.react
46
- });
41
+ const matrix = createMockMatrix(SKILLS.react);
47
42
  useMatrixStore.getState().setMatrix(matrix);
48
43
  useMatrixStore.getState().reset();
49
44
  globalExpect(useMatrixStore.getState().matrix).toBeNull();
@@ -56,35 +51,27 @@ describe("MatrixStore", () => {
56
51
  });
57
52
  describe("getSkill", () => {
58
53
  it("should return a skill by SkillId", () => {
59
- const reactSkill = createMockSkill("web-framework-react");
60
- const matrix = createMockMatrix({
61
- "web-framework-react": reactSkill
62
- });
54
+ const reactSkill = SKILLS.react;
55
+ const matrix = createMockMatrix(reactSkill);
63
56
  useMatrixStore.getState().setMatrix(matrix);
64
57
  const result = useMatrixStore.getState().getSkill("web-framework-react");
65
58
  globalExpect(result).toBe(reactSkill);
66
59
  });
67
60
  it("should return a skill by SkillSlug via slugMap", () => {
68
- const reactSkill = createMockSkill("web-framework-react");
69
- const matrix = createMockMatrix({
70
- "web-framework-react": reactSkill
71
- });
61
+ const reactSkill = SKILLS.react;
62
+ const matrix = createMockMatrix(reactSkill);
72
63
  useMatrixStore.getState().setMatrix(matrix);
73
64
  const result = useMatrixStore.getState().getSkill("react");
74
65
  globalExpect(result).toBe(reactSkill);
75
66
  });
76
67
  it("should return undefined for unknown ID", () => {
77
- const matrix = createMockMatrix({
78
- "web-framework-react": TEST_SKILLS.react
79
- });
68
+ const matrix = createMockMatrix(SKILLS.react);
80
69
  useMatrixStore.getState().setMatrix(matrix);
81
70
  const result = useMatrixStore.getState().getSkill("web-framework-nonexistent");
82
71
  globalExpect(result).toBeUndefined();
83
72
  });
84
73
  it("should return undefined for unknown slug", () => {
85
- const matrix = createMockMatrix({
86
- "web-framework-react": TEST_SKILLS.react
87
- });
74
+ const matrix = createMockMatrix(SKILLS.react);
88
75
  useMatrixStore.getState().setMatrix(matrix);
89
76
  const result = useMatrixStore.getState().getSkill("nonexistent");
90
77
  globalExpect(result).toBeUndefined();
@@ -96,44 +83,34 @@ describe("MatrixStore", () => {
96
83
  });
97
84
  describe("standalone selectors", () => {
98
85
  it("should look up a skill via the standalone getSkill selector", () => {
99
- const reactSkill = createMockSkill("web-framework-react");
100
- const matrix = createMockMatrix({
101
- "web-framework-react": reactSkill
102
- });
86
+ const reactSkill = SKILLS.react;
87
+ const matrix = createMockMatrix(reactSkill);
103
88
  useMatrixStore.getState().setMatrix(matrix);
104
89
  const result = getSkill("web-framework-react");
105
90
  globalExpect(result).toBe(reactSkill);
106
91
  });
107
92
  it("should return the matrix via the standalone getMatrix selector", () => {
108
- const matrix = createMockMatrix({
109
- "web-framework-react": TEST_SKILLS.react
110
- });
93
+ const matrix = createMockMatrix(SKILLS.react);
111
94
  useMatrixStore.getState().setMatrix(matrix);
112
95
  const result = getMatrix();
113
96
  globalExpect(result).toBe(matrix);
114
97
  });
115
98
  it("should throw via the standalone getSkill selector for missing skill", () => {
116
- const matrix = createMockMatrix({
117
- "web-framework-react": TEST_SKILLS.react
118
- });
99
+ const matrix = createMockMatrix(SKILLS.react);
119
100
  useMatrixStore.getState().setMatrix(matrix);
120
101
  globalExpect(() => getSkill("web-framework-nonexistent")).toThrow(
121
102
  "Skill 'web-framework-nonexistent' not found in matrix store"
122
103
  );
123
104
  });
124
105
  it("should return undefined via findSkill for missing skill", () => {
125
- const matrix = createMockMatrix({
126
- "web-framework-react": TEST_SKILLS.react
127
- });
106
+ const matrix = createMockMatrix(SKILLS.react);
128
107
  useMatrixStore.getState().setMatrix(matrix);
129
108
  const result = findSkill("web-framework-nonexistent");
130
109
  globalExpect(result).toBeUndefined();
131
110
  });
132
111
  it("should return a skill via findSkill when found", () => {
133
- const reactSkill = createMockSkill("web-framework-react");
134
- const matrix = createMockMatrix({
135
- "web-framework-react": reactSkill
136
- });
112
+ const reactSkill = SKILLS.react;
113
+ const matrix = createMockMatrix(reactSkill);
137
114
  useMatrixStore.getState().setMatrix(matrix);
138
115
  const result = findSkill("web-framework-react");
139
116
  globalExpect(result).toBe(reactSkill);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/stores/matrix-store.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { useMatrixStore, getSkill, getMatrix, findSkill } from \"./matrix-store\";\nimport { createMockMatrix, createMockSkill } from \"../lib/__tests__/helpers\";\nimport { TEST_SKILLS } from \"../lib/__tests__/test-fixtures\";\nimport type { SkillId, SkillSlug } from \"../types\";\n\ndescribe(\"MatrixStore\", () => {\n describe(\"setMatrix and getMatrix\", () => {\n it(\"should store and retrieve the matrix\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const retrieved = useMatrixStore.getState().getMatrix();\n expect(retrieved).toBe(matrix);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should clear the matrix back to null\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n useMatrixStore.getState().reset();\n\n expect(useMatrixStore.getState().matrix).toBeNull();\n });\n });\n\n describe(\"getMatrix\", () => {\n it(\"should throw when store is not populated\", () => {\n expect(() => useMatrixStore.getState().getMatrix()).toThrow(\"Matrix store not initialized\");\n });\n });\n\n describe(\"getSkill\", () => {\n it(\"should return a skill by SkillId\", () => {\n const reactSkill = createMockSkill(\"web-framework-react\");\n const matrix = createMockMatrix({\n \"web-framework-react\": reactSkill,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return a skill by SkillSlug via slugMap\", () => {\n const reactSkill = createMockSkill(\"web-framework-react\");\n const matrix = createMockMatrix({\n \"web-framework-react\": reactSkill,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"react\" as SkillSlug);\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return undefined for unknown ID\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"web-framework-nonexistent\" as SkillId);\n expect(result).toBeUndefined();\n });\n\n it(\"should return undefined for unknown slug\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"nonexistent\" as SkillSlug);\n expect(result).toBeUndefined();\n });\n\n it(\"should return undefined when store is not populated\", () => {\n const result = useMatrixStore.getState().getSkill(\"web-framework-react\");\n expect(result).toBeUndefined();\n });\n });\n\n describe(\"standalone selectors\", () => {\n it(\"should look up a skill via the standalone getSkill selector\", () => {\n const reactSkill = createMockSkill(\"web-framework-react\");\n const matrix = createMockMatrix({\n \"web-framework-react\": reactSkill,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = getSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return the matrix via the standalone getMatrix selector\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = getMatrix();\n expect(result).toBe(matrix);\n });\n\n it(\"should throw via the standalone getSkill selector for missing skill\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n expect(() => getSkill(\"web-framework-nonexistent\" as SkillId)).toThrow(\n \"Skill 'web-framework-nonexistent' not found in matrix store\",\n );\n });\n\n it(\"should return undefined via findSkill for missing skill\", () => {\n const matrix = createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = findSkill(\"web-framework-nonexistent\" as SkillId);\n expect(result).toBeUndefined();\n });\n\n it(\"should return a skill via findSkill when found\", () => {\n const reactSkill = createMockSkill(\"web-framework-react\");\n const matrix = createMockMatrix({\n \"web-framework-react\": reactSkill,\n });\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = findSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should throw via the standalone getMatrix selector when not populated\", () => {\n expect(() => getMatrix()).toThrow(\"Matrix store not initialized\");\n });\n });\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/stores/matrix-store.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { useMatrixStore, getSkill, getMatrix, findSkill } from \"./matrix-store\";\nimport { createMockMatrix, SKILLS } from \"../lib/__tests__/helpers\";\nimport type { SkillId, SkillSlug } from \"../types\";\n\ndescribe(\"MatrixStore\", () => {\n describe(\"setMatrix and getMatrix\", () => {\n it(\"should store and retrieve the matrix\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const retrieved = useMatrixStore.getState().getMatrix();\n expect(retrieved).toBe(matrix);\n });\n });\n\n describe(\"reset\", () => {\n it(\"should clear the matrix back to null\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n useMatrixStore.getState().reset();\n\n expect(useMatrixStore.getState().matrix).toBeNull();\n });\n });\n\n describe(\"getMatrix\", () => {\n it(\"should throw when store is not populated\", () => {\n expect(() => useMatrixStore.getState().getMatrix()).toThrow(\"Matrix store not initialized\");\n });\n });\n\n describe(\"getSkill\", () => {\n it(\"should return a skill by SkillId\", () => {\n const reactSkill = SKILLS.react;\n const matrix = createMockMatrix(reactSkill);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return a skill by SkillSlug via slugMap\", () => {\n const reactSkill = SKILLS.react;\n const matrix = createMockMatrix(reactSkill);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return undefined for unknown ID\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"web-framework-nonexistent\" as SkillId);\n expect(result).toBeUndefined();\n });\n\n it(\"should return undefined for unknown slug\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = useMatrixStore.getState().getSkill(\"nonexistent\" as SkillSlug);\n expect(result).toBeUndefined();\n });\n\n it(\"should return undefined when store is not populated\", () => {\n const result = useMatrixStore.getState().getSkill(\"web-framework-react\");\n expect(result).toBeUndefined();\n });\n });\n\n describe(\"standalone selectors\", () => {\n it(\"should look up a skill via the standalone getSkill selector\", () => {\n const reactSkill = SKILLS.react;\n const matrix = createMockMatrix(reactSkill);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = getSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should return the matrix via the standalone getMatrix selector\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = getMatrix();\n expect(result).toBe(matrix);\n });\n\n it(\"should throw via the standalone getSkill selector for missing skill\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n expect(() => getSkill(\"web-framework-nonexistent\" as SkillId)).toThrow(\n \"Skill 'web-framework-nonexistent' not found in matrix store\",\n );\n });\n\n it(\"should return undefined via findSkill for missing skill\", () => {\n const matrix = createMockMatrix(SKILLS.react);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = findSkill(\"web-framework-nonexistent\" as SkillId);\n expect(result).toBeUndefined();\n });\n\n it(\"should return a skill via findSkill when found\", () => {\n const reactSkill = SKILLS.react;\n const matrix = createMockMatrix(reactSkill);\n\n useMatrixStore.getState().setMatrix(matrix);\n\n const result = findSkill(\"web-framework-react\");\n expect(result).toBe(reactSkill);\n });\n\n it(\"should throw via the standalone getMatrix selector when not populated\", () => {\n expect(() => getMatrix()).toThrow(\"Matrix store not initialized\");\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useWizardStore
4
- } from "../chunk-4C7CSZC5.js";
5
- import "../chunk-53URJ5XK.js";
6
- import "../chunk-F3REOP7N.js";
4
+ } from "../chunk-EULHBV5V.js";
5
+ import "../chunk-45R64U2S.js";
6
+ import "../chunk-L6MTIQ2U.js";
7
7
  import "../chunk-T4EXUIBY.js";
8
8
  import "../chunk-BKL3DF2Q.js";
9
- import "../chunk-LMZXL5RQ.js";
9
+ import "../chunk-R3AR4VLZ.js";
10
10
  import "../chunk-EGMQ3SXN.js";
11
- import "../chunk-EC3UJRKZ.js";
11
+ import "../chunk-KWB3B2HS.js";
12
12
  import "../chunk-DHET7RCE.js";
13
13
  export {
14
14
  useWizardStore