@claude-collective/cli 0.26.1 → 0.29.5
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.
- package/CHANGELOG.md +123 -0
- package/README.md +47 -13
- package/config/skills-matrix.yaml +1 -1
- package/config/stacks.yaml +331 -94
- package/dist/{chunk-NT4K647L.js → chunk-4DX47646.js} +97 -76
- package/dist/chunk-4DX47646.js.map +1 -0
- package/dist/{chunk-KWYO3M5Q.js → chunk-4JSKL5SD.js} +25 -24
- package/dist/chunk-4JSKL5SD.js.map +1 -0
- package/dist/chunk-52XVP55K.js +165 -0
- package/dist/chunk-52XVP55K.js.map +1 -0
- package/dist/{chunk-OBXAY23Y.js → chunk-5I6VY2E7.js} +5 -5
- package/dist/chunk-5I6VY2E7.js.map +1 -0
- package/dist/{chunk-324DM2L6.js → chunk-5WIHSJRO.js} +230 -65
- package/dist/chunk-5WIHSJRO.js.map +1 -0
- package/dist/chunk-73E5CQUK.js +142 -0
- package/dist/chunk-73E5CQUK.js.map +1 -0
- package/dist/{chunk-DBRUQQUF.js → chunk-7GHTQSWI.js} +5 -1
- package/dist/{chunk-DBRUQQUF.js.map → chunk-7GHTQSWI.js.map} +1 -1
- package/dist/chunk-7ICBJZV2.js +63 -0
- package/dist/chunk-7ICBJZV2.js.map +1 -0
- package/dist/{chunk-CQ7657GA.js → chunk-ABK6CSWI.js} +1248 -735
- package/dist/chunk-ABK6CSWI.js.map +1 -0
- package/dist/{chunk-ZW2PELOH.js → chunk-AGNT3FUE.js} +106 -69
- package/dist/chunk-AGNT3FUE.js.map +1 -0
- package/dist/{chunk-F4RD5FYM.js → chunk-AGQRRJSY.js} +5 -2
- package/dist/chunk-AGQRRJSY.js.map +1 -0
- package/dist/{chunk-GGFOD5PK.js → chunk-AXND7NCM.js} +122 -66
- package/dist/chunk-AXND7NCM.js.map +1 -0
- package/dist/{chunk-NQJ47R4N.js → chunk-CQZAKMPJ.js} +66 -14
- package/dist/chunk-CQZAKMPJ.js.map +1 -0
- package/dist/{chunk-XENOESJZ.js → chunk-DALU3Y3U.js} +10 -67
- package/dist/chunk-DALU3Y3U.js.map +1 -0
- package/dist/chunk-DDNK5UNE.js +366 -0
- package/dist/chunk-DDNK5UNE.js.map +1 -0
- package/dist/chunk-DIRH4PDF.js +24 -0
- package/dist/chunk-DIRH4PDF.js.map +1 -0
- package/dist/{chunk-VVYNZZUX.js → chunk-DTFEFLUU.js} +9 -5
- package/dist/chunk-DTFEFLUU.js.map +1 -0
- package/dist/chunk-F23LEXMC.js +81 -0
- package/dist/chunk-F23LEXMC.js.map +1 -0
- package/dist/chunk-FUPBGSRA.js +66 -0
- package/dist/chunk-FUPBGSRA.js.map +1 -0
- package/dist/{chunk-U7HFKR74.js → chunk-H2NM6BDH.js} +5 -2
- package/dist/chunk-H2NM6BDH.js.map +1 -0
- package/dist/chunk-HJS2FWLA.js +75 -0
- package/dist/chunk-HJS2FWLA.js.map +1 -0
- package/dist/{chunk-MCTSHLAF.js → chunk-I6YQDA2J.js} +41 -14
- package/dist/chunk-I6YQDA2J.js.map +1 -0
- package/dist/{chunk-G35SYE6Z.js → chunk-J3J2WPI2.js} +37 -104
- package/dist/chunk-J3J2WPI2.js.map +1 -0
- package/dist/{chunk-HIQGK5XJ.js → chunk-JDQDYGGC.js} +123 -86
- package/dist/chunk-JDQDYGGC.js.map +1 -0
- package/dist/chunk-JWIH7YQE.js +88 -0
- package/dist/chunk-JWIH7YQE.js.map +1 -0
- package/dist/{chunk-4S4FCAA2.js → chunk-KFL72CWK.js} +26 -31
- package/dist/chunk-KFL72CWK.js.map +1 -0
- package/dist/{chunk-H7SSBSPR.js → chunk-LY5HM34M.js} +8 -5
- package/dist/chunk-LY5HM34M.js.map +1 -0
- package/dist/{chunk-2YMMJP4Z.js → chunk-PRY6MLN3.js} +92 -29
- package/dist/chunk-PRY6MLN3.js.map +1 -0
- package/dist/{chunk-3X5D7RM5.js → chunk-RFW2RIM7.js} +15 -4
- package/dist/chunk-RFW2RIM7.js.map +1 -0
- package/dist/chunk-RXC7AF7N.js +31 -0
- package/dist/chunk-RXC7AF7N.js.map +1 -0
- package/dist/chunk-VBOBVQQW.js +29 -0
- package/dist/chunk-VBOBVQQW.js.map +1 -0
- package/dist/{chunk-ETCVEV3S.js → chunk-VIBOSHRL.js} +242 -155
- package/dist/chunk-VIBOSHRL.js.map +1 -0
- package/dist/chunk-WPED6CL3.js +105 -0
- package/dist/chunk-WPED6CL3.js.map +1 -0
- package/dist/chunk-Z6UK6MI2.js +233 -0
- package/dist/chunk-Z6UK6MI2.js.map +1 -0
- package/dist/{chunk-CZBNDP5B.js → chunk-ZCIWRQQ4.js} +3 -3
- package/dist/commands/build/marketplace.js +21 -20
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +7 -11
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +8 -13
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +109 -135
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +4 -5
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +5 -6
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +4 -5
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +4 -5
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +5 -6
- package/dist/commands/config/unset-project.js +4 -5
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +26 -11
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +13 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +71 -42
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +34 -14
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +93 -52
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +27 -9
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +98 -48
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +10 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +8 -11
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +17 -18
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +23 -9
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +23 -20
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +28 -21
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +30 -22
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +103 -39
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +4 -5
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +4 -5
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +4 -5
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +4 -5
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.test.js +2 -2
- package/dist/components/common/confirm.test.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +4 -2
- package/dist/components/wizard/category-grid.js +3 -1
- package/dist/components/wizard/category-grid.test.js +63 -64
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +13 -0
- package/dist/components/wizard/help-modal.js +10 -0
- package/dist/components/wizard/help-modal.js.map +1 -0
- package/dist/components/wizard/menu-item.js +2 -1
- package/dist/components/wizard/search-modal.js +3 -1
- package/dist/components/wizard/search-modal.test.js +4 -2
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -1
- package/dist/components/wizard/section-progress.test.js +2 -1
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +6 -2
- package/dist/components/wizard/source-grid.test.js +49 -45
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +15 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-approach.js +8 -6
- package/dist/components/wizard/step-approach.test.js +11 -9
- package/dist/components/wizard/step-approach.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +9 -13
- package/dist/components/wizard/step-build.test.js +27 -45
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +2 -1
- package/dist/components/wizard/step-confirm.test.js +6 -5
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -1
- package/dist/components/wizard/step-refine.test.js +3 -2
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +8 -6
- package/dist/components/wizard/step-settings.test.js +12 -10
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +11 -9
- package/dist/components/wizard/step-sources.test.js +16 -15
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +9 -6
- package/dist/components/wizard/step-stack.test.js +15 -12
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -1
- package/dist/components/wizard/wizard-layout.js +7 -9
- package/dist/components/wizard/wizard-tabs.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +26 -20
- package/dist/config/skills-matrix.yaml +1 -1
- package/dist/config/stacks.yaml +331 -94
- package/dist/hooks/init.js +3 -4
- package/dist/hooks/init.js.map +1 -1
- package/dist/source-manager-JUPEIBMY.js +15 -0
- package/dist/source-manager-JUPEIBMY.js.map +1 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/output-format.md +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +272 -25
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +2 -1
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/output-format.md +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/src/schemas/agent-frontmatter.schema.json +84 -0
- package/src/schemas/agent.schema.json +93 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +113 -0
- package/src/schemas/plugin.schema.json +130 -0
- package/src/schemas/project-config.schema.json +125 -0
- package/src/schemas/project-source-config.schema.json +81 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/skills-matrix.schema.json +467 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +111 -0
- package/dist/chunk-2OW7FCIF.js +0 -197
- package/dist/chunk-2OW7FCIF.js.map +0 -1
- package/dist/chunk-2YMMJP4Z.js.map +0 -1
- package/dist/chunk-324DM2L6.js.map +0 -1
- package/dist/chunk-3X5D7RM5.js.map +0 -1
- package/dist/chunk-4S4FCAA2.js.map +0 -1
- package/dist/chunk-CQ7657GA.js.map +0 -1
- package/dist/chunk-ETCVEV3S.js.map +0 -1
- package/dist/chunk-F4RD5FYM.js.map +0 -1
- package/dist/chunk-G35SYE6Z.js.map +0 -1
- package/dist/chunk-GGFOD5PK.js.map +0 -1
- package/dist/chunk-H7SSBSPR.js.map +0 -1
- package/dist/chunk-HIQGK5XJ.js.map +0 -1
- package/dist/chunk-HWD32NP7.js +0 -19
- package/dist/chunk-HWD32NP7.js.map +0 -1
- package/dist/chunk-KWYO3M5Q.js.map +0 -1
- package/dist/chunk-MCTSHLAF.js.map +0 -1
- package/dist/chunk-NQJ47R4N.js.map +0 -1
- package/dist/chunk-NT4K647L.js.map +0 -1
- package/dist/chunk-O6ZTD7ZI.js +0 -70
- package/dist/chunk-O6ZTD7ZI.js.map +0 -1
- package/dist/chunk-OBXAY23Y.js.map +0 -1
- package/dist/chunk-TMED5DQ2.js +0 -210
- package/dist/chunk-TMED5DQ2.js.map +0 -1
- package/dist/chunk-U7HFKR74.js.map +0 -1
- package/dist/chunk-UEMRJI2K.js +0 -146
- package/dist/chunk-UEMRJI2K.js.map +0 -1
- package/dist/chunk-UNN7523L.js +0 -78
- package/dist/chunk-UNN7523L.js.map +0 -1
- package/dist/chunk-VVYNZZUX.js.map +0 -1
- package/dist/chunk-XENOESJZ.js.map +0 -1
- package/dist/chunk-ZW2PELOH.js.map +0 -1
- package/dist/source-manager-VWIIDTK5.js +0 -16
- /package/dist/{chunk-CZBNDP5B.js.map → chunk-ZCIWRQQ4.js.map} +0 -0
- /package/dist/{source-manager-VWIIDTK5.js.map → components/wizard/domain-selection.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: pattern-scout
|
|
3
3
|
title: Pattern Scout Agent
|
|
4
4
|
description: Extracts ALL patterns from monorepo (15+ categories - code, architecture, testing, design, build, CI/CD, env, security) - creates comprehensive standards - invoke for new codebases
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: web-pattern-critique
|
|
3
3
|
title: Web Pattern Critique Agent
|
|
4
4
|
description: Critiques extracted patterns against industry standards (Airbnb, Stripe, Meta, Vercel) - frontend architecture focus - invoke AFTER pattern-scout extracts patterns
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: web-pm
|
|
3
3
|
title: Web PM and Architect Agent
|
|
4
4
|
description: Creates detailed implementation specs by researching codebase patterns - architectural planning and requirements gathering - invoke BEFORE developer for any new feature
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: api-researcher
|
|
3
3
|
title: API Researcher Agent
|
|
4
4
|
description: Read-only backend research specialist - discovers API route patterns, understands database schemas and ORM patterns, catalogs middleware and authentication flows, finds similar service implementations - produces structured findings for api-developer - invoke for backend research before implementation
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: web-researcher
|
|
3
3
|
title: Web Researcher Agent
|
|
4
4
|
description: Read-only frontend research specialist - discovers UI component patterns, catalogs design systems, understands styling methodology and tokens, finds similar component implementations - produces structured findings for web-developer - invoke for frontend research before implementation
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: api-reviewer
|
|
3
3
|
title: API Reviewer Agent
|
|
4
4
|
description: Reviews non-component code - API routes, server utils, configs (*.config.*), build tooling, CI/CD (*.yml), security, env management - defers UI components to web-reviewer
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: cli-reviewer
|
|
3
3
|
title: CLI Reviewer Agent
|
|
4
4
|
description: Reviews CLI code ONLY - CLI commands, interactive prompts, exit codes, SIGINT handling, error messages, user feedback patterns - defers non-CLI code to api-reviewer
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: web-reviewer
|
|
3
3
|
title: Web Reviewer Agent
|
|
4
4
|
description: Reviews UI component code ONLY (*.tsx/*.jsx with JSX) - components, hooks, props, state, performance, a11y patterns - NOT for API routes, configs, or server code (use api-reviewer)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: cli-tester
|
|
3
3
|
title: CLI Tester Agent
|
|
4
4
|
description: Tests CLI applications - wizard flows, commands, keyboard interactions, file system outputs - invoke BEFORE or AFTER cli-developer implements features
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# yaml-language-server: $schema
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas/agent.schema.json
|
|
2
2
|
id: web-tester
|
|
3
3
|
title: Web Tester Agent
|
|
4
4
|
description: Writes tests BEFORE implementation - all test types (*.test.*, *.spec.*, E2E) - Tester red-green-refactor - invoke BEFORE developer implements feature
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
useWizardStore
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-DDNK5UNE.js";
|
|
5
|
+
import "../chunk-ABK6CSWI.js";
|
|
6
|
+
import "../chunk-5WIHSJRO.js";
|
|
7
|
+
import "../chunk-52XVP55K.js";
|
|
7
8
|
import "../chunk-AWKZ5BDL.js";
|
|
8
9
|
export {
|
|
9
10
|
useWizardStore
|
|
@@ -7,17 +7,21 @@ import {
|
|
|
7
7
|
} from "../chunk-QR2EBWL2.js";
|
|
8
8
|
import {
|
|
9
9
|
useWizardStore
|
|
10
|
-
} from "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
} from "../chunk-DDNK5UNE.js";
|
|
11
|
+
import "../chunk-ABK6CSWI.js";
|
|
12
|
+
import "../chunk-5WIHSJRO.js";
|
|
12
13
|
import {
|
|
13
14
|
DEFAULT_PRESELECTED_SKILLS
|
|
14
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-52XVP55K.js";
|
|
15
16
|
import {
|
|
16
17
|
init_esm_shims
|
|
17
18
|
} from "../chunk-AWKZ5BDL.js";
|
|
18
19
|
|
|
19
20
|
// src/cli/stores/wizard-store.test.ts
|
|
20
21
|
init_esm_shims();
|
|
22
|
+
function sa(id, preloaded = false) {
|
|
23
|
+
return { id, preloaded };
|
|
24
|
+
}
|
|
21
25
|
describe("WizardStore", () => {
|
|
22
26
|
beforeEach(() => {
|
|
23
27
|
useWizardStore.getState().reset();
|
|
@@ -79,7 +83,7 @@ describe("WizardStore", () => {
|
|
|
79
83
|
globalExpect(step).toBe("stack");
|
|
80
84
|
globalExpect(history).toEqual(["approach"]);
|
|
81
85
|
});
|
|
82
|
-
it("should return to approach
|
|
86
|
+
it("when goBack is called with empty history, should return to approach step", () => {
|
|
83
87
|
const store = useWizardStore.getState();
|
|
84
88
|
store.setStep("stack");
|
|
85
89
|
store.goBack();
|
|
@@ -87,14 +91,6 @@ describe("WizardStore", () => {
|
|
|
87
91
|
const { step } = useWizardStore.getState();
|
|
88
92
|
globalExpect(step).toBe("approach");
|
|
89
93
|
});
|
|
90
|
-
it("should reset focus when changing steps", () => {
|
|
91
|
-
const store = useWizardStore.getState();
|
|
92
|
-
store.setFocus(2, 3);
|
|
93
|
-
store.setStep("stack");
|
|
94
|
-
const { focusedRow, focusedCol } = useWizardStore.getState();
|
|
95
|
-
globalExpect(focusedRow).toBe(0);
|
|
96
|
-
globalExpect(focusedCol).toBe(0);
|
|
97
|
-
});
|
|
98
94
|
});
|
|
99
95
|
describe("approach selection", () => {
|
|
100
96
|
it("should set approach to stack", () => {
|
|
@@ -117,7 +113,7 @@ describe("WizardStore", () => {
|
|
|
117
113
|
const { selectedStackId } = useWizardStore.getState();
|
|
118
114
|
globalExpect(selectedStackId).toBe("nextjs-fullstack");
|
|
119
115
|
});
|
|
120
|
-
it("
|
|
116
|
+
it("when selectStack is called with null, should clear previously selected stack", () => {
|
|
121
117
|
const store = useWizardStore.getState();
|
|
122
118
|
store.selectStack("nextjs-fullstack");
|
|
123
119
|
store.selectStack(null);
|
|
@@ -198,7 +194,7 @@ describe("WizardStore", () => {
|
|
|
198
194
|
globalExpect(result).toBe(true);
|
|
199
195
|
globalExpect(currentDomainIndex).toBe(1);
|
|
200
196
|
});
|
|
201
|
-
it("should return false
|
|
197
|
+
it("when already at the last domain, should return false from nextDomain", () => {
|
|
202
198
|
const store = useWizardStore.getState();
|
|
203
199
|
store.toggleDomain("web");
|
|
204
200
|
const result = store.nextDomain();
|
|
@@ -214,7 +210,7 @@ describe("WizardStore", () => {
|
|
|
214
210
|
globalExpect(result).toBe(true);
|
|
215
211
|
globalExpect(currentDomainIndex).toBe(0);
|
|
216
212
|
});
|
|
217
|
-
it("should return false
|
|
213
|
+
it("when already at the first domain, should return false from prevDomain", () => {
|
|
218
214
|
const store = useWizardStore.getState();
|
|
219
215
|
store.toggleDomain("web");
|
|
220
216
|
const result = store.prevDomain();
|
|
@@ -268,6 +264,30 @@ describe("WizardStore", () => {
|
|
|
268
264
|
globalExpect(showDescriptions).toBe(true);
|
|
269
265
|
});
|
|
270
266
|
});
|
|
267
|
+
describe("install mode auto-defaulting", () => {
|
|
268
|
+
it("should default installMode to plugin when set via setState (marketplace available)", () => {
|
|
269
|
+
useWizardStore.setState({ installMode: "plugin" });
|
|
270
|
+
const { installMode } = useWizardStore.getState();
|
|
271
|
+
globalExpect(installMode).toBe("plugin");
|
|
272
|
+
});
|
|
273
|
+
it("should keep installMode as local when set via setState (no marketplace)", () => {
|
|
274
|
+
useWizardStore.setState({ installMode: "local" });
|
|
275
|
+
const { installMode } = useWizardStore.getState();
|
|
276
|
+
globalExpect(installMode).toBe("local");
|
|
277
|
+
});
|
|
278
|
+
it("should allow toggling installMode after auto-defaulting to plugin", () => {
|
|
279
|
+
useWizardStore.setState({ installMode: "plugin" });
|
|
280
|
+
useWizardStore.getState().toggleInstallMode();
|
|
281
|
+
const { installMode } = useWizardStore.getState();
|
|
282
|
+
globalExpect(installMode).toBe("local");
|
|
283
|
+
});
|
|
284
|
+
it("should reset installMode to local after reset even if previously set to plugin", () => {
|
|
285
|
+
useWizardStore.setState({ installMode: "plugin" });
|
|
286
|
+
useWizardStore.getState().reset();
|
|
287
|
+
const { installMode } = useWizardStore.getState();
|
|
288
|
+
globalExpect(installMode).toBe("local");
|
|
289
|
+
});
|
|
290
|
+
});
|
|
271
291
|
describe("computed getters", () => {
|
|
272
292
|
it("should get all selected technologies", () => {
|
|
273
293
|
const store = useWizardStore.getState();
|
|
@@ -279,13 +299,156 @@ describe("WizardStore", () => {
|
|
|
279
299
|
globalExpect(technologies).toContain("web-styling-scss-modules");
|
|
280
300
|
globalExpect(technologies).toContain("api-framework-hono");
|
|
281
301
|
});
|
|
282
|
-
it("should get
|
|
302
|
+
it("should get default methodology skills", () => {
|
|
283
303
|
const store = useWizardStore.getState();
|
|
284
|
-
const skills = store.
|
|
304
|
+
const skills = store.getDefaultMethodologySkills();
|
|
285
305
|
for (const skill of DEFAULT_PRESELECTED_SKILLS) {
|
|
286
306
|
globalExpect(skills).toContain(skill);
|
|
287
307
|
}
|
|
288
308
|
});
|
|
309
|
+
it("should get selected technologies per domain", () => {
|
|
310
|
+
const store = useWizardStore.getState();
|
|
311
|
+
store.toggleTechnology("web", "framework", "web-framework-react", true);
|
|
312
|
+
store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
|
|
313
|
+
store.toggleTechnology("api", "api", "api-framework-hono", true);
|
|
314
|
+
const perDomain = store.getSelectedTechnologiesPerDomain();
|
|
315
|
+
globalExpect(perDomain.web).toEqual(["web-framework-react", "web-styling-scss-modules"]);
|
|
316
|
+
globalExpect(perDomain.api).toEqual(["api-framework-hono"]);
|
|
317
|
+
globalExpect(perDomain.cli).toBeUndefined();
|
|
318
|
+
});
|
|
319
|
+
it("should return empty object for getSelectedTechnologiesPerDomain with no selections", () => {
|
|
320
|
+
const store = useWizardStore.getState();
|
|
321
|
+
const perDomain = store.getSelectedTechnologiesPerDomain();
|
|
322
|
+
globalExpect(perDomain).toEqual({});
|
|
323
|
+
});
|
|
324
|
+
it("should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain", () => {
|
|
325
|
+
const store = useWizardStore.getState();
|
|
326
|
+
store.toggleTechnology("web", "framework", "web-framework-react", true);
|
|
327
|
+
store.toggleTechnology("web", "framework", "web-framework-react", true);
|
|
328
|
+
const perDomain = store.getSelectedTechnologiesPerDomain();
|
|
329
|
+
globalExpect(perDomain.web).toBeUndefined();
|
|
330
|
+
});
|
|
331
|
+
it("should get technology count", () => {
|
|
332
|
+
const store = useWizardStore.getState();
|
|
333
|
+
store.toggleTechnology("web", "framework", "web-framework-react", true);
|
|
334
|
+
store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
|
|
335
|
+
store.toggleTechnology("api", "api", "api-framework-hono", true);
|
|
336
|
+
globalExpect(store.getTechnologyCount()).toBe(3);
|
|
337
|
+
});
|
|
338
|
+
it("should return 0 for getTechnologyCount with no selections", () => {
|
|
339
|
+
const store = useWizardStore.getState();
|
|
340
|
+
globalExpect(store.getTechnologyCount()).toBe(0);
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
describe("navigation guards", () => {
|
|
344
|
+
it("canGoToNextDomain should return true when not at last domain", () => {
|
|
345
|
+
const store = useWizardStore.getState();
|
|
346
|
+
store.toggleDomain("web");
|
|
347
|
+
store.toggleDomain("api");
|
|
348
|
+
globalExpect(store.canGoToNextDomain()).toBe(true);
|
|
349
|
+
});
|
|
350
|
+
it("canGoToNextDomain should return false when at last domain", () => {
|
|
351
|
+
const store = useWizardStore.getState();
|
|
352
|
+
store.toggleDomain("web");
|
|
353
|
+
globalExpect(store.canGoToNextDomain()).toBe(false);
|
|
354
|
+
});
|
|
355
|
+
it("canGoToNextDomain should return false with no domains", () => {
|
|
356
|
+
const store = useWizardStore.getState();
|
|
357
|
+
globalExpect(store.canGoToNextDomain()).toBe(false);
|
|
358
|
+
});
|
|
359
|
+
it("canGoToPreviousDomain should return false when at first domain", () => {
|
|
360
|
+
const store = useWizardStore.getState();
|
|
361
|
+
store.toggleDomain("web");
|
|
362
|
+
store.toggleDomain("api");
|
|
363
|
+
globalExpect(store.canGoToPreviousDomain()).toBe(false);
|
|
364
|
+
});
|
|
365
|
+
it("canGoToPreviousDomain should return true when past first domain", () => {
|
|
366
|
+
const store = useWizardStore.getState();
|
|
367
|
+
store.toggleDomain("web");
|
|
368
|
+
store.toggleDomain("api");
|
|
369
|
+
store.nextDomain();
|
|
370
|
+
globalExpect(store.canGoToPreviousDomain()).toBe(true);
|
|
371
|
+
});
|
|
372
|
+
it("canGoToPreviousDomain should return false with no domains", () => {
|
|
373
|
+
const store = useWizardStore.getState();
|
|
374
|
+
globalExpect(store.canGoToPreviousDomain()).toBe(false);
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
describe("parent domain selectors", () => {
|
|
378
|
+
const matrixWithParentDomain = {
|
|
379
|
+
categories: {
|
|
380
|
+
"error-handling": {
|
|
381
|
+
id: "error-handling",
|
|
382
|
+
displayName: "Error Handling",
|
|
383
|
+
description: "Error handling tools",
|
|
384
|
+
domain: "web-extras",
|
|
385
|
+
parent_domain: "web",
|
|
386
|
+
exclusive: false,
|
|
387
|
+
required: false,
|
|
388
|
+
order: 0
|
|
389
|
+
},
|
|
390
|
+
framework: {
|
|
391
|
+
id: "framework",
|
|
392
|
+
displayName: "Framework",
|
|
393
|
+
description: "Web frameworks",
|
|
394
|
+
domain: "web",
|
|
395
|
+
exclusive: true,
|
|
396
|
+
required: false,
|
|
397
|
+
order: 0
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
const matrixWithoutParent = {
|
|
402
|
+
categories: {
|
|
403
|
+
framework: {
|
|
404
|
+
id: "framework",
|
|
405
|
+
displayName: "Framework",
|
|
406
|
+
description: "Web frameworks",
|
|
407
|
+
domain: "web",
|
|
408
|
+
exclusive: true,
|
|
409
|
+
required: false,
|
|
410
|
+
order: 0
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
it("should find parent domain for a domain with parent_domain", () => {
|
|
415
|
+
const store = useWizardStore.getState();
|
|
416
|
+
const parent = store.getParentDomain(
|
|
417
|
+
"web-extras",
|
|
418
|
+
matrixWithParentDomain
|
|
419
|
+
);
|
|
420
|
+
globalExpect(parent).toBe("web");
|
|
421
|
+
});
|
|
422
|
+
it("should return undefined for a domain without parent_domain", () => {
|
|
423
|
+
const store = useWizardStore.getState();
|
|
424
|
+
const parent = store.getParentDomain("web", matrixWithoutParent);
|
|
425
|
+
globalExpect(parent).toBeUndefined();
|
|
426
|
+
});
|
|
427
|
+
it("should get parent domain selections when parent exists", () => {
|
|
428
|
+
const store = useWizardStore.getState();
|
|
429
|
+
store.toggleTechnology("web", "framework", "web-framework-react", true);
|
|
430
|
+
const parentSelections = store.getParentDomainSelections(
|
|
431
|
+
"web-extras",
|
|
432
|
+
matrixWithParentDomain
|
|
433
|
+
);
|
|
434
|
+
globalExpect(parentSelections).toEqual({ framework: ["web-framework-react"] });
|
|
435
|
+
});
|
|
436
|
+
it("should return undefined for getParentDomainSelections when no parent", () => {
|
|
437
|
+
const store = useWizardStore.getState();
|
|
438
|
+
const parentSelections = store.getParentDomainSelections(
|
|
439
|
+
"web",
|
|
440
|
+
matrixWithoutParent
|
|
441
|
+
);
|
|
442
|
+
globalExpect(parentSelections).toBeUndefined();
|
|
443
|
+
});
|
|
444
|
+
it("should return undefined for getParentDomainSelections when parent has no selections", () => {
|
|
445
|
+
const store = useWizardStore.getState();
|
|
446
|
+
const parentSelections = store.getParentDomainSelections(
|
|
447
|
+
"web-extras",
|
|
448
|
+
matrixWithParentDomain
|
|
449
|
+
);
|
|
450
|
+
globalExpect(parentSelections).toBeUndefined();
|
|
451
|
+
});
|
|
289
452
|
});
|
|
290
453
|
describe("reset", () => {
|
|
291
454
|
it("should reset to initial state", () => {
|
|
@@ -311,7 +474,7 @@ describe("WizardStore", () => {
|
|
|
311
474
|
const store = useWizardStore.getState();
|
|
312
475
|
const stack = {
|
|
313
476
|
agents: {
|
|
314
|
-
web: { framework: "react" }
|
|
477
|
+
web: { framework: [sa("web-framework-react", true)] }
|
|
315
478
|
}
|
|
316
479
|
};
|
|
317
480
|
const categories = {
|
|
@@ -321,15 +484,18 @@ describe("WizardStore", () => {
|
|
|
321
484
|
const { selectedDomains, domainSelections } = useWizardStore.getState();
|
|
322
485
|
globalExpect(selectedDomains).toEqual(["web", "web-extras", "api", "cli", "mobile", "shared"]);
|
|
323
486
|
globalExpect(domainSelections.web).toBeDefined();
|
|
324
|
-
globalExpect(domainSelections.web.framework).toEqual(["react"]);
|
|
487
|
+
globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
|
|
325
488
|
globalExpect(domainSelections.api).toBeUndefined();
|
|
326
489
|
});
|
|
327
490
|
it("should populate domainSelections from stack agents", () => {
|
|
328
491
|
const store = useWizardStore.getState();
|
|
329
492
|
const stack = {
|
|
330
493
|
agents: {
|
|
331
|
-
web: {
|
|
332
|
-
|
|
494
|
+
web: {
|
|
495
|
+
framework: [sa("web-framework-react", true)],
|
|
496
|
+
"client-state": [sa("web-state-zustand")]
|
|
497
|
+
},
|
|
498
|
+
api: { api: [sa("api-framework-hono", true)] }
|
|
333
499
|
}
|
|
334
500
|
};
|
|
335
501
|
const categories = {
|
|
@@ -339,15 +505,15 @@ describe("WizardStore", () => {
|
|
|
339
505
|
};
|
|
340
506
|
store.populateFromStack(stack, categories);
|
|
341
507
|
const { domainSelections } = useWizardStore.getState();
|
|
342
|
-
globalExpect(domainSelections.web.framework).toEqual(["react"]);
|
|
343
|
-
globalExpect(domainSelections.web["client-state"]).toEqual(["zustand"]);
|
|
344
|
-
globalExpect(domainSelections.api.api).toEqual(["hono"]);
|
|
508
|
+
globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
|
|
509
|
+
globalExpect(domainSelections.web["client-state"]).toEqual(["web-state-zustand"]);
|
|
510
|
+
globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
|
|
345
511
|
});
|
|
346
512
|
it("should skip entries without a domain", () => {
|
|
347
513
|
const store = useWizardStore.getState();
|
|
348
514
|
const stack = {
|
|
349
515
|
agents: {
|
|
350
|
-
misc: { methodology: "vitest" }
|
|
516
|
+
misc: { methodology: [sa("meta-methodology-vitest")] }
|
|
351
517
|
}
|
|
352
518
|
};
|
|
353
519
|
const categories = {
|
|
@@ -357,6 +523,87 @@ describe("WizardStore", () => {
|
|
|
357
523
|
const { domainSelections } = useWizardStore.getState();
|
|
358
524
|
globalExpect(Object.keys(domainSelections)).toHaveLength(0);
|
|
359
525
|
});
|
|
526
|
+
it("should populate multiple skills from array-valued subcategories", () => {
|
|
527
|
+
const store = useWizardStore.getState();
|
|
528
|
+
const stack = {
|
|
529
|
+
agents: {
|
|
530
|
+
"pattern-scout": {
|
|
531
|
+
methodology: [
|
|
532
|
+
sa("meta-methodology-investigation-requirements", true),
|
|
533
|
+
sa("meta-methodology-anti-over-engineering", true),
|
|
534
|
+
sa("meta-methodology-success-criteria", true)
|
|
535
|
+
]
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
const categories = {
|
|
540
|
+
methodology: { domain: "shared" }
|
|
541
|
+
};
|
|
542
|
+
store.populateFromStack(stack, categories);
|
|
543
|
+
const { domainSelections } = useWizardStore.getState();
|
|
544
|
+
globalExpect(domainSelections.shared.methodology).toEqual([
|
|
545
|
+
"meta-methodology-investigation-requirements",
|
|
546
|
+
"meta-methodology-anti-over-engineering",
|
|
547
|
+
"meta-methodology-success-criteria"
|
|
548
|
+
]);
|
|
549
|
+
});
|
|
550
|
+
it("should handle single-element and multi-element arrays across agents", () => {
|
|
551
|
+
const store = useWizardStore.getState();
|
|
552
|
+
const stack = {
|
|
553
|
+
agents: {
|
|
554
|
+
web: {
|
|
555
|
+
framework: [sa("web-framework-react", true)],
|
|
556
|
+
methodology: [
|
|
557
|
+
sa("meta-methodology-investigation-requirements", true),
|
|
558
|
+
sa("meta-methodology-anti-over-engineering", true)
|
|
559
|
+
]
|
|
560
|
+
},
|
|
561
|
+
api: { api: [sa("api-framework-hono", true)] }
|
|
562
|
+
}
|
|
563
|
+
};
|
|
564
|
+
const categories = {
|
|
565
|
+
framework: { domain: "web" },
|
|
566
|
+
methodology: { domain: "shared" },
|
|
567
|
+
api: { domain: "api" }
|
|
568
|
+
};
|
|
569
|
+
store.populateFromStack(stack, categories);
|
|
570
|
+
const { domainSelections } = useWizardStore.getState();
|
|
571
|
+
globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
|
|
572
|
+
globalExpect(domainSelections.shared.methodology).toEqual([
|
|
573
|
+
"meta-methodology-investigation-requirements",
|
|
574
|
+
"meta-methodology-anti-over-engineering"
|
|
575
|
+
]);
|
|
576
|
+
globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
|
|
577
|
+
});
|
|
578
|
+
it("should deduplicate skills from arrays across multiple agents", () => {
|
|
579
|
+
const store = useWizardStore.getState();
|
|
580
|
+
const stack = {
|
|
581
|
+
agents: {
|
|
582
|
+
agent1: {
|
|
583
|
+
methodology: [
|
|
584
|
+
sa("meta-methodology-investigation-requirements", true),
|
|
585
|
+
sa("meta-methodology-anti-over-engineering", true)
|
|
586
|
+
]
|
|
587
|
+
},
|
|
588
|
+
agent2: {
|
|
589
|
+
methodology: [
|
|
590
|
+
sa("meta-methodology-anti-over-engineering", true),
|
|
591
|
+
sa("meta-methodology-success-criteria", true)
|
|
592
|
+
]
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
const categories = {
|
|
597
|
+
methodology: { domain: "shared" }
|
|
598
|
+
};
|
|
599
|
+
store.populateFromStack(stack, categories);
|
|
600
|
+
const { domainSelections } = useWizardStore.getState();
|
|
601
|
+
globalExpect(domainSelections.shared.methodology).toEqual([
|
|
602
|
+
"meta-methodology-investigation-requirements",
|
|
603
|
+
"meta-methodology-anti-over-engineering",
|
|
604
|
+
"meta-methodology-success-criteria"
|
|
605
|
+
]);
|
|
606
|
+
});
|
|
360
607
|
});
|
|
361
608
|
describe("complex flows", () => {
|
|
362
609
|
it("should handle complete stack selection flow", () => {
|