@claude-collective/cli 0.8.0 → 0.13.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 (217) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +26 -9
  3. package/dist/{chunk-TOPAIL5W.js → chunk-3U3R4NCG.js} +2 -2
  4. package/dist/chunk-3U3R4NCG.js.map +1 -0
  5. package/dist/{chunk-YKXBGCFD.js → chunk-57Y5RALO.js} +10 -10
  6. package/dist/chunk-57Y5RALO.js.map +1 -0
  7. package/dist/{chunk-ED73HCW2.js → chunk-6DCSSORF.js} +37 -88
  8. package/dist/chunk-6DCSSORF.js.map +1 -0
  9. package/dist/{chunk-6LS7XO3H.js → chunk-6Q3Y7KVB.js} +2 -2
  10. package/dist/chunk-6Q3Y7KVB.js.map +1 -0
  11. package/dist/{chunk-A3J6IAXK.js → chunk-76DWXGQE.js} +4 -2
  12. package/dist/chunk-76DWXGQE.js.map +1 -0
  13. package/dist/{chunk-Q6DR5QUH.js → chunk-7Q44DMSP.js} +62 -27
  14. package/dist/chunk-7Q44DMSP.js.map +1 -0
  15. package/dist/chunk-ACNBKXXJ.js +321 -0
  16. package/dist/chunk-ACNBKXXJ.js.map +1 -0
  17. package/dist/{chunk-QGGSLMO3.js → chunk-B7CCVP6Q.js} +41 -9
  18. package/dist/chunk-B7CCVP6Q.js.map +1 -0
  19. package/dist/{chunk-LVKRVFYR.js → chunk-BDLUZVKU.js} +2 -2
  20. package/dist/chunk-BDLUZVKU.js.map +1 -0
  21. package/dist/{chunk-HNDT5QRB.js → chunk-CDX4W4DM.js} +3 -3
  22. package/dist/chunk-CDX4W4DM.js.map +1 -0
  23. package/dist/{chunk-MYAVQ23U.js → chunk-CJEHB4TB.js} +23 -9
  24. package/dist/chunk-CJEHB4TB.js.map +1 -0
  25. package/dist/{chunk-DKGL77IY.js → chunk-CPZOTVCI.js} +15 -14
  26. package/dist/chunk-CPZOTVCI.js.map +1 -0
  27. package/dist/{chunk-K7PTOVX4.js → chunk-D237EVNB.js} +32 -3
  28. package/dist/chunk-D237EVNB.js.map +1 -0
  29. package/dist/{chunk-Q2LH2DAB.js → chunk-DRXPNNPB.js} +19 -18
  30. package/dist/chunk-DRXPNNPB.js.map +1 -0
  31. package/dist/{chunk-Y3V43XCU.js → chunk-E3FJH4TF.js} +12 -8
  32. package/dist/chunk-E3FJH4TF.js.map +1 -0
  33. package/dist/{chunk-3HBTELJN.js → chunk-ED4E6Q2T.js} +10 -10
  34. package/dist/chunk-ED4E6Q2T.js.map +1 -0
  35. package/dist/{chunk-SYQ7R2JO.js → chunk-EHS3TWWP.js} +3 -3
  36. package/dist/chunk-EHS3TWWP.js.map +1 -0
  37. package/dist/{chunk-LQTST4WY.js → chunk-GDH553MV.js} +6 -6
  38. package/dist/chunk-GDH553MV.js.map +1 -0
  39. package/dist/{chunk-A65SBAAJ.js → chunk-HLJX2FTL.js} +31 -5
  40. package/dist/chunk-HLJX2FTL.js.map +1 -0
  41. package/dist/chunk-I2DSLOXZ.js +75 -0
  42. package/dist/chunk-I2DSLOXZ.js.map +1 -0
  43. package/dist/{chunk-SEBPPFUW.js → chunk-I4TPKIYX.js} +33 -18
  44. package/dist/chunk-I4TPKIYX.js.map +1 -0
  45. package/dist/{chunk-NGBFJJ7Q.js → chunk-IMDW5ZUP.js} +19 -11
  46. package/dist/chunk-IMDW5ZUP.js.map +1 -0
  47. package/dist/{chunk-U4VYHKPM.js → chunk-JIPWV2FX.js} +6 -6
  48. package/dist/chunk-JIPWV2FX.js.map +1 -0
  49. package/dist/{chunk-G2FBJOZG.js → chunk-K7EVM5LY.js} +4 -4
  50. package/dist/chunk-K7EVM5LY.js.map +1 -0
  51. package/dist/{chunk-MJSFR562.js → chunk-KAAEN2PO.js} +3 -3
  52. package/dist/chunk-KAAEN2PO.js.map +1 -0
  53. package/dist/{chunk-FNOYEXUE.js → chunk-LE6IY6IT.js} +22 -17
  54. package/dist/chunk-LE6IY6IT.js.map +1 -0
  55. package/dist/{chunk-CIY5UBRB.js → chunk-NDY25DTL.js} +6 -6
  56. package/dist/chunk-NDY25DTL.js.map +1 -0
  57. package/dist/{chunk-OLBOTK3O.js → chunk-P26A2K5N.js} +7 -7
  58. package/dist/chunk-P26A2K5N.js.map +1 -0
  59. package/dist/{chunk-DHFFRMF6.js → chunk-RTE64SJA.js} +2 -2
  60. package/dist/chunk-RTE64SJA.js.map +1 -0
  61. package/dist/{chunk-3ZCB5K33.js → chunk-SGJ23HIP.js} +14 -11
  62. package/dist/chunk-SGJ23HIP.js.map +1 -0
  63. package/dist/{chunk-C4ZTIYFR.js → chunk-SVYPSDWY.js} +10 -10
  64. package/dist/chunk-SVYPSDWY.js.map +1 -0
  65. package/dist/{chunk-MMDXNZPF.js → chunk-TKFPKEV3.js} +2 -2
  66. package/dist/chunk-TKFPKEV3.js.map +1 -0
  67. package/dist/{chunk-M7YCPFIX.js → chunk-UQTEPWU7.js} +2 -2
  68. package/dist/chunk-UQTEPWU7.js.map +1 -0
  69. package/dist/{chunk-QESUUPOE.js → chunk-V46GGCCI.js} +80 -27
  70. package/dist/chunk-V46GGCCI.js.map +1 -0
  71. package/dist/{chunk-UOWHJ6BE.js → chunk-X6QONICW.js} +6 -3
  72. package/dist/chunk-X6QONICW.js.map +1 -0
  73. package/dist/chunk-Y2LW7R3Y.js +23 -0
  74. package/dist/chunk-Y2LW7R3Y.js.map +1 -0
  75. package/dist/chunk-Z2CWURZ6.js +78 -0
  76. package/dist/chunk-Z2CWURZ6.js.map +1 -0
  77. package/dist/chunk-Z7G4B5HJ.js +377 -0
  78. package/dist/chunk-Z7G4B5HJ.js.map +1 -0
  79. package/dist/{chunk-XKEG3SCV.js → chunk-ZENYS6KW.js} +13 -9
  80. package/dist/chunk-ZENYS6KW.js.map +1 -0
  81. package/dist/{cli-v2 → cli}/defaults/agent-mappings.yaml +5 -5
  82. package/dist/commands/build/marketplace.js +9 -9
  83. package/dist/commands/build/marketplace.js.map +1 -1
  84. package/dist/commands/build/plugins.js +12 -12
  85. package/dist/commands/build/plugins.js.map +1 -1
  86. package/dist/commands/build/stack.js +15 -15
  87. package/dist/commands/build/stack.js.map +1 -1
  88. package/dist/commands/compile.js +21 -21
  89. package/dist/commands/compile.js.map +1 -1
  90. package/dist/commands/config/get.js +9 -8
  91. package/dist/commands/config/get.js.map +1 -1
  92. package/dist/commands/config/index.js +7 -6
  93. package/dist/commands/config/index.js.map +1 -1
  94. package/dist/commands/config/path.js +8 -7
  95. package/dist/commands/config/path.js.map +1 -1
  96. package/dist/commands/config/set-project.js +9 -8
  97. package/dist/commands/config/set-project.js.map +1 -1
  98. package/dist/commands/config/set.js +9 -8
  99. package/dist/commands/config/set.js.map +1 -1
  100. package/dist/commands/config/show.js +6 -5
  101. package/dist/commands/config/unset-project.js +9 -8
  102. package/dist/commands/config/unset-project.js.map +1 -1
  103. package/dist/commands/config/unset.js +9 -8
  104. package/dist/commands/config/unset.js.map +1 -1
  105. package/dist/commands/diff.js +12 -12
  106. package/dist/commands/diff.js.map +1 -1
  107. package/dist/commands/doctor.js +10 -10
  108. package/dist/commands/doctor.js.map +1 -1
  109. package/dist/commands/edit.js +52 -49
  110. package/dist/commands/edit.js.map +1 -1
  111. package/dist/commands/eject.js +180 -97
  112. package/dist/commands/eject.js.map +1 -1
  113. package/dist/commands/import/skill.js +339 -0
  114. package/dist/commands/import/skill.js.map +1 -0
  115. package/dist/commands/info.js +9 -9
  116. package/dist/commands/info.js.map +1 -1
  117. package/dist/commands/init.js +205 -78
  118. package/dist/commands/init.js.map +1 -1
  119. package/dist/commands/list.js +9 -9
  120. package/dist/commands/list.js.map +1 -1
  121. package/dist/commands/new/agent.js +19 -21
  122. package/dist/commands/new/agent.js.map +1 -1
  123. package/dist/commands/new/skill.js +11 -12
  124. package/dist/commands/new/skill.js.map +1 -1
  125. package/dist/commands/outdated.js +12 -12
  126. package/dist/commands/outdated.js.map +1 -1
  127. package/dist/commands/search.js +205 -17
  128. package/dist/commands/search.js.map +1 -1
  129. package/dist/commands/test-imports.js +18 -18
  130. package/dist/commands/test-imports.js.map +1 -1
  131. package/dist/commands/uninstall.js +58 -78
  132. package/dist/commands/uninstall.js.map +1 -1
  133. package/dist/commands/update.js +21 -21
  134. package/dist/commands/update.js.map +1 -1
  135. package/dist/commands/validate.js +9 -9
  136. package/dist/commands/validate.js.map +1 -1
  137. package/dist/commands/version/bump.js +8 -8
  138. package/dist/commands/version/bump.js.map +1 -1
  139. package/dist/commands/version/index.js +8 -8
  140. package/dist/commands/version/index.js.map +1 -1
  141. package/dist/commands/version/set.js +7 -7
  142. package/dist/commands/version/set.js.map +1 -1
  143. package/dist/commands/version/show.js +8 -8
  144. package/dist/commands/version/show.js.map +1 -1
  145. package/dist/components/common/confirm.js +1 -1
  146. package/dist/components/common/message.js +1 -1
  147. package/dist/components/common/message.js.map +1 -1
  148. package/dist/components/common/spinner.js +1 -1
  149. package/dist/components/common/spinner.js.map +1 -1
  150. package/dist/components/skill-search/skill-search.js +10 -0
  151. package/dist/components/skill-search/skill-search.js.map +1 -0
  152. package/dist/components/wizard/category-grid.js +1 -1
  153. package/dist/components/wizard/category-grid.test.js +213 -80
  154. package/dist/components/wizard/category-grid.test.js.map +1 -1
  155. package/dist/components/wizard/section-progress.js +1 -1
  156. package/dist/components/wizard/section-progress.test.js +2 -2
  157. package/dist/components/wizard/section-progress.test.js.map +1 -1
  158. package/dist/components/wizard/step-approach.js +4 -3
  159. package/dist/components/wizard/step-build.js +4 -3
  160. package/dist/components/wizard/step-build.test.js +29 -17
  161. package/dist/components/wizard/step-build.test.js.map +1 -1
  162. package/dist/components/wizard/step-confirm.js +2 -1
  163. package/dist/components/wizard/step-refine.js +2 -1
  164. package/dist/components/wizard/step-refine.test.js +4 -3
  165. package/dist/components/wizard/step-refine.test.js.map +1 -1
  166. package/dist/components/wizard/step-stack-options.js +3 -3
  167. package/dist/components/wizard/step-stack.js +3 -3
  168. package/dist/components/wizard/wizard-footer.js +9 -0
  169. package/dist/components/wizard/wizard-footer.js.map +1 -0
  170. package/dist/components/wizard/wizard-tabs.js +1 -1
  171. package/dist/components/wizard/wizard.js +14 -12
  172. package/dist/hooks/init.js +5 -4
  173. package/dist/hooks/init.js.map +1 -1
  174. package/dist/index.js +1 -1
  175. package/dist/index.js.map +1 -1
  176. package/dist/stores/wizard-store.js +2 -2
  177. package/dist/stores/wizard-store.test.js +3 -3
  178. package/dist/stores/wizard-store.test.js.map +1 -1
  179. package/package.json +3 -2
  180. package/dist/chunk-3HBTELJN.js.map +0 -1
  181. package/dist/chunk-3ZCB5K33.js.map +0 -1
  182. package/dist/chunk-6LS7XO3H.js.map +0 -1
  183. package/dist/chunk-A3J6IAXK.js.map +0 -1
  184. package/dist/chunk-A65SBAAJ.js.map +0 -1
  185. package/dist/chunk-ALEPJ6YN.js +0 -80
  186. package/dist/chunk-ALEPJ6YN.js.map +0 -1
  187. package/dist/chunk-C4ZTIYFR.js.map +0 -1
  188. package/dist/chunk-CIY5UBRB.js.map +0 -1
  189. package/dist/chunk-DHFFRMF6.js.map +0 -1
  190. package/dist/chunk-DKGL77IY.js.map +0 -1
  191. package/dist/chunk-ED73HCW2.js.map +0 -1
  192. package/dist/chunk-FNOYEXUE.js.map +0 -1
  193. package/dist/chunk-G2FBJOZG.js.map +0 -1
  194. package/dist/chunk-HNDT5QRB.js.map +0 -1
  195. package/dist/chunk-K7PTOVX4.js.map +0 -1
  196. package/dist/chunk-LQTST4WY.js.map +0 -1
  197. package/dist/chunk-LVKRVFYR.js.map +0 -1
  198. package/dist/chunk-M7YCPFIX.js.map +0 -1
  199. package/dist/chunk-MJSFR562.js.map +0 -1
  200. package/dist/chunk-MMDXNZPF.js.map +0 -1
  201. package/dist/chunk-MYAVQ23U.js.map +0 -1
  202. package/dist/chunk-NGBFJJ7Q.js.map +0 -1
  203. package/dist/chunk-OLBOTK3O.js.map +0 -1
  204. package/dist/chunk-PPNTD5LO.js +0 -330
  205. package/dist/chunk-PPNTD5LO.js.map +0 -1
  206. package/dist/chunk-Q2LH2DAB.js.map +0 -1
  207. package/dist/chunk-Q6DR5QUH.js.map +0 -1
  208. package/dist/chunk-QESUUPOE.js.map +0 -1
  209. package/dist/chunk-QGGSLMO3.js.map +0 -1
  210. package/dist/chunk-SEBPPFUW.js.map +0 -1
  211. package/dist/chunk-SYQ7R2JO.js.map +0 -1
  212. package/dist/chunk-TOPAIL5W.js.map +0 -1
  213. package/dist/chunk-U4VYHKPM.js.map +0 -1
  214. package/dist/chunk-UOWHJ6BE.js.map +0 -1
  215. package/dist/chunk-XKEG3SCV.js.map +0 -1
  216. package/dist/chunk-Y3V43XCU.js.map +0 -1
  217. package/dist/chunk-YKXBGCFD.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,133 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.13.0] - 2026-02-06
9
+
10
+ ### Added
11
+
12
+ - **Import skill command** (`cc import skill`) - Import skills from GitHub repos with `--list`, `--skill`, `--all`, `--force`, `--dry-run` options
13
+ - **Interactive skill search** (`cc search -i`) - Live filtering, multi-select, batch import from configured sources
14
+ - **Sources config** - Configure multiple skill registries in `config.yaml` with `sources` array
15
+ - **Wizard footer component** - Split-layout footer with navigation hints on left, actions on right
16
+ - **Framework-first build flow** - Web domain hides other categories until framework is selected
17
+
18
+ ### Changed
19
+
20
+ - **Wizard tabs** - Tab-style navigation with background colors (cyan active, white completed) instead of circle indicators
21
+ - **Wizard header** - Now displays CLI version
22
+ - **Category grid styling** - Background colors instead of circles/strikethrough for selection states
23
+ - **Agent definitions generalized** - 16 agents updated to use generic terms (styling, database) instead of specific tech (SCSS, Drizzle)
24
+
25
+ ### Removed
26
+
27
+ - Old `search.ts` command - Replaced with dual-mode `search.tsx` (static + interactive)
28
+
29
+ [0.13.0]: https://github.com/claude-collective/cli/releases/tag/v0.13.0
30
+
31
+ ## [0.12.0] - 2026-02-04
32
+
33
+ ### Added
34
+
35
+ - **Agent Compliance Bible** - 30-test compliance suite in `docs/bibles/AGENT-COMPLIANCE-BIBLE.md` for verifying agent alignment with PROMPT_BIBLE and architecture standards
36
+ - **Claude Code Research** - Documentation of 176 Claude Code updates (Oct 2025 - Jan 2026) covering subagents, hooks, plugins, and async execution patterns
37
+ - **cli-tester examples** - Example test output for CLI component testing
38
+
39
+ ### Changed
40
+
41
+ - **Agent partials improved** - Major conciseness pass on 15+ examples.md files, removed ~800 lines of filler, N/A sections, and verbose examples
42
+ - **Workflow quality** - Standardized workflows across all agents, removed time estimates, improved clarity
43
+ - **Bible index updated** - Fixed paths from `src/docs/` to `docs/bibles/`, corrected agent naming conventions
44
+
45
+ [0.12.0]: https://github.com/claude-collective/cli/releases/tag/v0.12.0
46
+
47
+ ## [0.11.0] - 2026-02-04
48
+
49
+ ### Breaking Changes
50
+
51
+ - **CLI source directory renamed** - `src/cli-v2/` renamed to `src/cli/`. The v2 suffix was removed as this is now the primary CLI implementation.
52
+
53
+ ### Added
54
+
55
+ - **Bible documentation** - Added comprehensive documentation standards in `docs/bibles/`:
56
+ - `CLAUDE_ARCHITECTURE_BIBLE.md` - System architecture and agent structure
57
+ - `PROMPT_BIBLE.md` - Prompt engineering techniques
58
+ - `DOCUMENTATION_BIBLE.md` - Documentation standards
59
+ - `FRONTEND_BIBLE.md` - Frontend development standards
60
+ - `SKILL-ATOMICITY-BIBLE.md` - Skill design principles
61
+ - `INDEX.md` - Bible index and reference guide
62
+ - **Missing command documentation** - Added docs for: `doctor`, `search`, `outdated`, `info`, `diff`, `update`, `new skill`, `new agent`, and all config/version subcommands
63
+ - **skills-matrix.yaml schema documentation** - Full schema with categories, relationships, and skill aliases documented in `data-models.md`
64
+
65
+ ### Changed
66
+
67
+ - **Agents genericized** - Developer agents no longer reference specific technologies (SCSS, Drizzle, Commander.js, etc.). Skills provide implementation details.
68
+ - **Agent references fixed** - Updated all agent references to use correct names: `frontend-*` → `web-*`, `backend-*` → `api-*`, `tester` → `web-tester`/`cli-tester`
69
+ - **Documentation paths fixed** - Fixed skill paths from `src/skills/` to `.claude/skills/`, Bible paths to `docs/bibles/`
70
+ - **cc eject options corrected** - Changed from `templates/config/agents` to `agent-partials/skills/all`
71
+ - **README install paths fixed** - Changed `~/.claude/` to `./.claude/` (relative to project)
72
+ - **Command naming convention** - Updated docs to use space-separated format (`build plugins`) instead of colon notation (`build:plugins`)
73
+
74
+ ### Removed
75
+
76
+ - **Deprecated documentation** - Deleted outdated files that referenced non-existent architecture:
77
+ - `docs/workflows.md` - Referenced non-existent `src/stacks/`
78
+ - `docs/stacks-as-visual-hierarchy.md` - Design proposal never implemented
79
+ - `docs/solution-a-migration-tasks.md` - Outdated migration document
80
+
81
+ [0.11.0]: https://github.com/claude-collective/cli/releases/tag/v0.11.0
82
+
83
+ ## [0.10.0] - 2026-02-03
84
+
85
+ ### Breaking Changes
86
+
87
+ - **Directory structure changed** - Source files now in `.claude-src/`, runtime output in `.claude/`. Config moved from `.claude/config.yaml` to `.claude-src/config.yaml`. Backward compatible reads from both locations.
88
+ - **Uninstall removes directories** - `cc uninstall` now removes entire `.claude/` and `.claude-src/` directories. The `--keep-config` flag is removed.
89
+
90
+ ### Added
91
+
92
+ - `CLAUDE_SRC_DIR` constant for `.claude-src/` directory
93
+ - `loadProjectAgents()` function to load agents from `.claude-src/agents/`
94
+ - `agentBaseDir` field on AgentDefinition/AgentConfig types
95
+ - `marketplace` and `agents_source` fields on ProjectConfig type
96
+ - Eject creates minimal `config.yaml` with example stack blueprint if it doesn't exist
97
+ - Init merges with existing config instead of overwriting
98
+
99
+ ### Changed
100
+
101
+ - Eject agent-partials go to `.claude-src/agents/` (was `.claude/agents/_partials/`)
102
+ - Init writes config to `.claude-src/config.yaml`
103
+ - Compiler checks `.claude-src/agents/_templates/` first for templates
104
+ - Config readers check `.claude-src/` first, fall back to `.claude/`
105
+
106
+ [0.10.0]: https://github.com/claude-collective/cli/releases/tag/v0.10.0
107
+
108
+ ## [0.9.0] - 2026-02-03
109
+
110
+ ### Breaking Changes
111
+
112
+ - **Config location changed** - Project config now at `.claude/config.yaml` instead of `.claude-collective/config.yaml`. Global config is deprecated.
113
+ - **Eject types simplified** - Old types `templates`, `config`, `agents` removed. Use `agent-partials`, `skills`, or `all`.
114
+
115
+ ### Added
116
+
117
+ - `--refresh` flag for `cc eject` to force refresh cached remote sources
118
+ - Source is saved to `.claude/config.yaml` when using `--source` flag
119
+ - `resolveAuthor()` function for project-level author resolution
120
+ - `populateFromStack()` wizard action to pre-populate domain selections
121
+
122
+ ### Fixed
123
+
124
+ - **Compiled agents now include preloaded_skills** - Fixed bug where agents compiled by `cc init` had no skills in frontmatter
125
+ - **Wizard "customize" option** - Now pre-populates with stack defaults instead of starting from scratch
126
+ - **Source fetcher cache handling** - No longer errors when cache directory already exists
127
+
128
+ ### Changed
129
+
130
+ - Eject loads skills from source marketplace instead of plugin directory
131
+ - Global config functions deprecated in favor of project-level config
132
+
133
+ [0.9.0]: https://github.com/claude-collective/cli/releases/tag/v0.9.0
134
+
8
135
  ## [0.8.0] - 2026-02-02
9
136
 
10
137
  ### Breaking Changes
package/README.md CHANGED
@@ -32,12 +32,26 @@ requires node 18+ and [Claude Code](https://docs.anthropic.com/en/docs/claude-co
32
32
  ## commands
33
33
 
34
34
  ```bash
35
- cc init # interactive setup - pick skills, configure agents
36
- cc edit # modify your skill selection
37
- cc compile # recompile agents after changes
38
- cc list # show what's installed
39
- cc config # manage settings
40
- cc validate # check your setup is correct
35
+ cc init # interactive setup - pick skills, configure agents
36
+ cc edit # modify your skill selection
37
+ cc compile # recompile agents after changes
38
+ cc list # show what's installed
39
+ cc config # manage settings
40
+ cc validate # check your setup is correct
41
+ cc new skill # create a custom skill
42
+ cc new agent # create a custom agent
43
+ cc update # update local skills from source
44
+ cc uninstall # remove Claude Collective from project
45
+ cc doctor # diagnose setup issues
46
+ cc eject # eject skills/agent partials for customization
47
+ cc build marketplace # generate marketplace.json
48
+ cc build plugins # build plugins
49
+ cc build stack # build stacks
50
+ cc version # show/manage versions
51
+ cc diff # show skill differences
52
+ cc search # search for skills
53
+ cc info # show skill information
54
+ cc outdated # check outdated skills
41
55
  ```
42
56
 
43
57
  ## how skills work
@@ -76,20 +90,23 @@ each stack includes agents like `web-developer`, `api-reviewer`, `web-tester` -
76
90
 
77
91
  ```bash
78
92
  cc init
79
- # installs to ~/.claude/plugins/claude-collective/
93
+ # interactive wizard lets you choose: plugin mode, local mode, or marketplace setup
94
+ # plugin mode installs to ./.claude/plugins/claude-collective/
80
95
  ```
81
96
 
82
97
  **locally in your project** (for team sharing):
83
98
 
84
99
  ```bash
85
- cc init --local
100
+ cc init
101
+ # select "local" mode in the wizard
86
102
  # installs to ./.claude/ in your repo
87
103
  ```
88
104
 
89
105
  **your own marketplace** (for orgs):
90
106
 
91
107
  ```bash
92
- cc init --marketplace
108
+ cc init
109
+ # select "marketplace" mode in the wizard
93
110
  # scaffolds a marketplace you can customize and host
94
111
  ```
95
112
 
@@ -3,7 +3,7 @@ import {
3
3
  init_esm_shims
4
4
  } from "./chunk-DHET7RCE.js";
5
5
 
6
- // src/cli-v2/utils/logger.ts
6
+ // src/cli/utils/logger.ts
7
7
  init_esm_shims();
8
8
  var verboseMode = false;
9
9
  function setVerbose(enabled) {
@@ -19,4 +19,4 @@ export {
19
19
  setVerbose,
20
20
  verbose
21
21
  };
22
- //# sourceMappingURL=chunk-TOPAIL5W.js.map
22
+ //# sourceMappingURL=chunk-3U3R4NCG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/utils/logger.ts"],"sourcesContent":["/**\n * Verbose logging utility.\n * Used by lib/ modules that don't have access to oclif command context.\n * In oclif commands, prefer using this.log() instead.\n */\n\nlet verboseMode = false;\n\nexport function setVerbose(enabled: boolean): void {\n verboseMode = enabled;\n}\n\nexport function verbose(msg: string): void {\n if (verboseMode) {\n console.log(` ${msg}`);\n }\n}\n"],"mappings":";;;;;;AAAA;AAMA,IAAI,cAAc;AAEX,SAAS,WAAW,SAAwB;AACjD,gBAAc;AAChB;AAEO,SAAS,QAAQ,KAAmB;AACzC,MAAI,aAAa;AACf,YAAQ,IAAI,KAAK,GAAG,EAAE;AAAA,EACxB;AACF;","names":[]}
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  detectInstallation
4
- } from "./chunk-3ZCB5K33.js";
5
- import {
6
- loadProjectConfig
7
- } from "./chunk-MYAVQ23U.js";
4
+ } from "./chunk-SGJ23HIP.js";
8
5
  import {
9
6
  getCollectivePluginDir,
10
7
  getPluginAgentsDir,
11
8
  getPluginSkillsDir,
12
9
  readPluginManifest
13
- } from "./chunk-3HBTELJN.js";
10
+ } from "./chunk-ED4E6Q2T.js";
14
11
  import {
15
- DEFAULT_DISPLAY_VERSION
16
- } from "./chunk-A3J6IAXK.js";
12
+ loadProjectConfig
13
+ } from "./chunk-CJEHB4TB.js";
17
14
  import {
18
15
  directoryExists
19
- } from "./chunk-MMDXNZPF.js";
16
+ } from "./chunk-TKFPKEV3.js";
17
+ import {
18
+ DEFAULT_DISPLAY_VERSION
19
+ } from "./chunk-76DWXGQE.js";
20
20
  import {
21
21
  init_esm_shims
22
22
  } from "./chunk-DHET7RCE.js";
23
23
 
24
- // src/cli-v2/lib/plugin-info.ts
24
+ // src/cli/lib/plugin-info.ts
25
25
  init_esm_shims();
26
26
  import { readdir } from "fs/promises";
27
27
  var DEFAULT_NAME = "claude-collective";
@@ -126,4 +126,4 @@ export {
126
126
  getInstallationInfo,
127
127
  formatInstallationDisplay
128
128
  };
129
- //# sourceMappingURL=chunk-YKXBGCFD.js.map
129
+ //# sourceMappingURL=chunk-57Y5RALO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/plugin-info.ts"],"sourcesContent":["import { readdir } from \"fs/promises\";\nimport {\n getCollectivePluginDir,\n getPluginSkillsDir,\n getPluginAgentsDir,\n readPluginManifest,\n} from \"./plugin-finder\";\nimport { directoryExists } from \"../utils/fs\";\nimport { DEFAULT_DISPLAY_VERSION } from \"../consts\";\nimport { detectInstallation, type InstallMode } from \"./installation\";\nimport { loadProjectConfig } from \"./project-config\";\n\nconst DEFAULT_NAME = \"claude-collective\";\n\nexport interface PluginInfo {\n name: string;\n version: string;\n skillCount: number;\n agentCount: number;\n path: string;\n}\n\nexport interface InstallationInfo {\n mode: InstallMode;\n name: string;\n version: string;\n skillCount: number;\n agentCount: number;\n configPath: string;\n agentsDir: string;\n skillsDir: string;\n}\n\nexport async function getPluginInfo(): Promise<PluginInfo | null> {\n const pluginDir = getCollectivePluginDir();\n\n if (!(await directoryExists(pluginDir))) {\n return null;\n }\n\n const manifest = await readPluginManifest(pluginDir);\n if (!manifest) {\n return null;\n }\n\n const skillsDir = getPluginSkillsDir(pluginDir);\n const agentsDir = getPluginAgentsDir(pluginDir);\n\n let skillCount = 0;\n let agentCount = 0;\n\n if (await directoryExists(skillsDir)) {\n const skills = await readdir(skillsDir, { withFileTypes: true });\n skillCount = skills.filter((s) => s.isDirectory()).length;\n }\n\n if (await directoryExists(agentsDir)) {\n const agents = await readdir(agentsDir, { withFileTypes: true });\n agentCount = agents.filter(\n (a) => a.isFile() && a.name.endsWith(\".md\"),\n ).length;\n }\n\n return {\n name: manifest.name || DEFAULT_NAME,\n version: manifest.version || DEFAULT_DISPLAY_VERSION,\n skillCount,\n agentCount,\n path: pluginDir,\n };\n}\n\nexport function formatPluginDisplay(info: PluginInfo): string {\n return `Plugin: ${info.name} v${info.version}\n Skills: ${info.skillCount}\n Agents: ${info.agentCount}\n Path: ${info.path}`;\n}\n\n/**\n * Get installation info for either local or plugin mode.\n * Auto-detects the installation mode and returns unified info.\n */\nexport async function getInstallationInfo(): Promise<InstallationInfo | null> {\n const installation = await detectInstallation();\n\n if (!installation) {\n return null;\n }\n\n let skillCount = 0;\n let agentCount = 0;\n let name = DEFAULT_NAME;\n let version = DEFAULT_DISPLAY_VERSION;\n\n // Count skills\n if (await directoryExists(installation.skillsDir)) {\n try {\n const skills = await readdir(installation.skillsDir, {\n withFileTypes: true,\n });\n skillCount = skills.filter((s) => s.isDirectory()).length;\n } catch {\n // Ignore errors\n }\n }\n\n // Count agents\n if (await directoryExists(installation.agentsDir)) {\n try {\n const agents = await readdir(installation.agentsDir, {\n withFileTypes: true,\n });\n agentCount = agents.filter(\n (a) => a.isFile() && a.name.endsWith(\".md\"),\n ).length;\n } catch {\n // Ignore errors\n }\n }\n\n // Get name/version from config or manifest depending on mode\n if (installation.mode === \"local\") {\n const loaded = await loadProjectConfig(installation.projectDir);\n if (loaded?.config) {\n name = loaded.config.name || DEFAULT_NAME;\n // Local mode doesn't have version in the same way\n version = \"local\";\n }\n } else {\n // Plugin mode - read from manifest\n const pluginDir = getCollectivePluginDir(installation.projectDir);\n const manifest = await readPluginManifest(pluginDir);\n if (manifest) {\n name = manifest.name || DEFAULT_NAME;\n version = manifest.version || DEFAULT_DISPLAY_VERSION;\n }\n }\n\n return {\n mode: installation.mode,\n name,\n version,\n skillCount,\n agentCount,\n configPath: installation.configPath,\n agentsDir: installation.agentsDir,\n skillsDir: installation.skillsDir,\n };\n}\n\nexport function formatInstallationDisplay(info: InstallationInfo): string {\n const modeLabel = info.mode === \"local\" ? \"Local\" : \"Plugin\";\n const versionDisplay =\n info.mode === \"local\" ? \"(local mode)\" : `v${info.version}`;\n\n return `Installation: ${info.name} ${versionDisplay}\n Mode: ${modeLabel}\n Skills: ${info.skillCount}\n Agents: ${info.agentCount}\n Config: ${info.configPath}\n Agents: ${info.agentsDir}`;\n}\n"],"mappings":"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","names":[]}
@@ -1,110 +1,42 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ StepRefine
4
+ } from "./chunk-E3FJH4TF.js";
2
5
  import {
3
6
  StepStackOptions
4
- } from "./chunk-A65SBAAJ.js";
7
+ } from "./chunk-HLJX2FTL.js";
5
8
  import {
6
9
  StepStack
7
- } from "./chunk-HNDT5QRB.js";
10
+ } from "./chunk-CDX4W4DM.js";
8
11
  import {
9
12
  WIZARD_STEPS,
10
13
  WizardTabs
11
- } from "./chunk-ALEPJ6YN.js";
14
+ } from "./chunk-I2DSLOXZ.js";
12
15
  import {
13
16
  StepApproach
14
- } from "./chunk-XKEG3SCV.js";
17
+ } from "./chunk-ZENYS6KW.js";
15
18
  import {
16
19
  StepBuild,
17
20
  validateSelection
18
- } from "./chunk-Q6DR5QUH.js";
21
+ } from "./chunk-7Q44DMSP.js";
19
22
  import {
20
23
  StepConfirm
21
- } from "./chunk-UOWHJ6BE.js";
22
- import {
23
- StepRefine
24
- } from "./chunk-Y3V43XCU.js";
24
+ } from "./chunk-X6QONICW.js";
25
25
  import {
26
26
  useWizardStore
27
- } from "./chunk-K7PTOVX4.js";
27
+ } from "./chunk-D237EVNB.js";
28
+ import {
29
+ cliTheme
30
+ } from "./chunk-Z2CWURZ6.js";
28
31
  import {
29
32
  init_esm_shims
30
33
  } from "./chunk-DHET7RCE.js";
31
34
 
32
- // src/cli-v2/components/wizard/wizard.tsx
35
+ // src/cli/components/wizard/wizard.tsx
33
36
  init_esm_shims();
34
37
  import { useCallback, useMemo } from "react";
35
38
  import { Box, Text, useApp, useInput, useStdout } from "ink";
36
39
  import { ThemeProvider } from "@inkjs/ui";
37
-
38
- // src/cli-v2/components/themes/default.ts
39
- init_esm_shims();
40
- import { extendTheme, defaultTheme } from "@inkjs/ui";
41
- var cliTheme = extendTheme(defaultTheme, {
42
- components: {
43
- Spinner: {
44
- styles: {
45
- frame: () => ({ color: "cyan" }),
46
- label: () => ({ color: "gray" })
47
- }
48
- },
49
- Select: {
50
- styles: {
51
- focusIndicator: () => ({ color: "cyan" }),
52
- label: ({ isFocused }) => ({
53
- color: isFocused ? "cyan" : void 0
54
- })
55
- }
56
- },
57
- MultiSelect: {
58
- styles: {
59
- focusIndicator: () => ({ color: "cyan" }),
60
- label: ({ isFocused, isSelected }) => ({
61
- color: isFocused ? "cyan" : isSelected ? "green" : void 0
62
- }),
63
- checkboxChecked: () => ({ color: "green" })
64
- }
65
- },
66
- StatusMessage: {
67
- styles: {
68
- container: ({ variant }) => ({
69
- borderStyle: "round",
70
- borderColor: variant === "error" ? "red" : variant === "warning" ? "yellow" : variant === "success" ? "green" : "blue"
71
- })
72
- }
73
- },
74
- Alert: {
75
- styles: {
76
- container: ({ variant }) => ({
77
- borderColor: variant === "error" ? "red" : variant === "warning" ? "yellow" : variant === "success" ? "green" : "blue"
78
- }),
79
- icon: ({ variant }) => ({
80
- color: variant === "error" ? "red" : variant === "warning" ? "yellow" : variant === "success" ? "green" : "blue"
81
- })
82
- }
83
- },
84
- TextInput: {
85
- styles: {
86
- container: ({ isFocused }) => ({
87
- borderColor: isFocused ? "cyan" : "gray"
88
- }),
89
- cursor: () => ({ color: "cyan" })
90
- }
91
- },
92
- ConfirmInput: {
93
- styles: {
94
- highlightedChoice: () => ({ color: "cyan" })
95
- }
96
- },
97
- Badge: {
98
- styles: {
99
- container: ({ variant }) => ({
100
- color: variant === "error" ? "red" : variant === "warning" ? "yellow" : variant === "success" ? "green" : variant === "info" ? "blue" : "cyan"
101
- })
102
- }
103
- }
104
- }
105
- });
106
-
107
- // src/cli-v2/components/wizard/wizard.tsx
108
40
  import { jsx, jsxs } from "react/jsx-runtime";
109
41
  var MIN_TERMINAL_WIDTH = 80;
110
42
  function getStackName(stackId, matrix) {
@@ -121,7 +53,8 @@ function getStackTechnologyCount(stackId, matrix) {
121
53
  var Wizard = ({
122
54
  matrix,
123
55
  onComplete,
124
- onCancel
56
+ onCancel,
57
+ version
125
58
  }) => {
126
59
  const store = useWizardStore();
127
60
  const { exit } = useApp();
@@ -202,11 +135,24 @@ var Wizard = ({
202
135
  store.selectedStackId,
203
136
  matrix
204
137
  );
205
- return /* @__PURE__ */ jsx(StepStackOptions, { stackName, technologyCount: techCount });
138
+ return /* @__PURE__ */ jsx(
139
+ StepStackOptions,
140
+ {
141
+ stackName,
142
+ technologyCount: techCount,
143
+ matrix
144
+ }
145
+ );
206
146
  }
207
147
  case "build": {
208
148
  const currentDomain = store.getCurrentDomain();
209
149
  const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : ["web"];
150
+ const allSelections = store.getAllSelectedTechnologies();
151
+ console.log("DEBUG allSelections for Build step:", allSelections);
152
+ console.log(
153
+ "DEBUG store.domainSelections:",
154
+ JSON.stringify(store.domainSelections, null, 2)
155
+ );
210
156
  return /* @__PURE__ */ jsx(
211
157
  StepBuild,
212
158
  {
@@ -215,7 +161,7 @@ var Wizard = ({
215
161
  selectedDomains: effectiveDomains,
216
162
  currentDomainIndex: store.currentDomainIndex,
217
163
  selections: store.domainSelections[currentDomain || "web"] || {},
218
- allSelections: store.getAllSelectedTechnologies(),
164
+ allSelections,
219
165
  focusedRow: store.focusedRow,
220
166
  focusedCol: store.focusedCol,
221
167
  showDescriptions: store.showDescriptions,
@@ -295,6 +241,10 @@ var Wizard = ({
295
241
  ] }) });
296
242
  }
297
243
  return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", padding: 1, children: [
244
+ version && /* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
245
+ "Claude Collective v",
246
+ version
247
+ ] }) }),
298
248
  /* @__PURE__ */ jsx(
299
249
  WizardTabs,
300
250
  {
@@ -304,12 +254,11 @@ var Wizard = ({
304
254
  skippedSteps
305
255
  }
306
256
  ),
307
- renderStep(),
308
- /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "ESC to go back, Ctrl+C to cancel" }) })
257
+ renderStep()
309
258
  ] }) });
310
259
  };
311
260
 
312
261
  export {
313
262
  Wizard
314
263
  };
315
- //# sourceMappingURL=chunk-ED73HCW2.js.map
264
+ //# sourceMappingURL=chunk-6DCSSORF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard.tsx"],"sourcesContent":["/**\n * Wizard component - Main orchestrator for the skill selection wizard.\n *\n * V2 Flow:\n * - approach: Choose stack template or build from scratch\n * - stack: Select pre-built stack (stack path) OR domains (scratch path)\n * - stack-options: Continue defaults or customize (stack path only)\n * - build: CategoryGrid for technology selection\n * - refine: Skill source selection\n * - confirm: Final confirmation\n *\n * Navigation:\n * - ESC goes back through history\n * - ESC at approach cancels wizard\n * - Ctrl+C cancels at any point\n */\nimport React, { useCallback, useMemo } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardTabs, WIZARD_STEPS } from \"./wizard-tabs.js\";\nimport { StepApproach } from \"./step-approach.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepStackOptions } from \"./step-stack-options.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepRefine } from \"./step-refine.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { validateSelection } from \"../../lib/matrix-resolver.js\";\nimport type { MergedSkillsMatrix } from \"../../types-matrix.js\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WizardResultV2 {\n selectedSkills: string[];\n selectedStackId: string | null;\n domainSelections: Record<string, Record<string, string[]>>;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n}\n\n/** @deprecated Use WizardResultV2 instead */\nexport interface WizardResult {\n selectedSkills: string[];\n selectedStack: { id: string } | null;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n}\n\ninterface WizardProps {\n matrix: MergedSkillsMatrix;\n onComplete: (result: WizardResultV2 | WizardResult) => void;\n onCancel: () => void;\n /** CLI version string to display in header */\n version?: string;\n /** @deprecated Initial skills no longer skip to category */\n initialSkills?: string[];\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/** Minimum terminal width required for the wizard */\nconst MIN_TERMINAL_WIDTH = 80;\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Get display name for a domain.\n */\nfunction getDomainDisplayName(domain: string): string {\n const displayNames: Record<string, string> = {\n web: \"Web\",\n api: \"API\",\n cli: \"CLI\",\n mobile: \"Mobile\",\n shared: \"Shared\",\n };\n return (\n displayNames[domain] || domain.charAt(0).toUpperCase() + domain.slice(1)\n );\n}\n\n/**\n * Get stack name from matrix by stack ID.\n */\nfunction getStackName(\n stackId: string | null,\n matrix: MergedSkillsMatrix,\n): string | undefined {\n if (!stackId) return undefined;\n const stack = matrix.suggestedStacks.find((s) => s.id === stackId);\n return stack?.name;\n}\n\n/**\n * Count technologies in a stack.\n */\nfunction getStackTechnologyCount(\n stackId: string | null,\n matrix: MergedSkillsMatrix,\n): number {\n if (!stackId) return 0;\n const stack = matrix.suggestedStacks.find((s) => s.id === stackId);\n if (!stack) return 0;\n return stack.allSkillIds.length;\n}\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport const Wizard: React.FC<WizardProps> = ({\n matrix,\n onComplete,\n onCancel,\n version,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n // Check terminal width\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n\n // Compute completed and skipped steps for WizardTabs\n const { completedSteps, skippedSteps } = useMemo(() => {\n const completed: string[] = [];\n const skipped: string[] = [];\n\n // Approach is complete when we've moved past it\n if (store.step !== \"approach\") {\n completed.push(\"approach\");\n }\n\n // Stack step handling\n if (\n store.step !== \"approach\" &&\n store.step !== \"stack\" &&\n store.step !== \"stack-options\"\n ) {\n completed.push(\"stack\");\n }\n\n // Build step handling\n // Stack path with defaults skips build\n if (\n store.approach === \"stack\" &&\n store.selectedStackId &&\n store.stackAction === \"defaults\"\n ) {\n skipped.push(\"build\");\n } else if (store.step === \"refine\" || store.step === \"confirm\") {\n completed.push(\"build\");\n }\n\n // Refine step\n if (store.step === \"confirm\") {\n completed.push(\"refine\");\n }\n\n return { completedSteps: completed, skippedSteps: skipped };\n }, [store.step, store.approach, store.selectedStackId, store.stackAction]);\n\n // Global escape handler\n useInput((input, key) => {\n if (key.escape) {\n if (store.step === \"approach\") {\n onCancel();\n exit();\n } else {\n store.goBack();\n }\n }\n });\n\n // Handle wizard completion\n const handleComplete = useCallback(() => {\n let allSkills: string[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n // Stack + defaults path: use stack's allSkillIds directly\n const stack = matrix.suggestedStacks.find(\n (s) => s.id === store.selectedStackId,\n );\n if (!stack) {\n console.warn(`Stack not found in matrix: ${store.selectedStackId}`);\n }\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n // Scratch / Customize path: resolve domainSelections via aliases\n const techNames = store.getAllSelectedTechnologies();\n // Resolve each technology name to its full skill ID via aliases\n allSkills = techNames.map((tech) => matrix.aliases[tech] || tech);\n }\n\n // Add methodology skills (always included)\n const methodologySkills = store.getSelectedSkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n const result: WizardResultV2 = {\n selectedSkills: allSkills,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, matrix, onComplete, exit]);\n\n // Render current step\n const renderStep = () => {\n switch (store.step) {\n case \"approach\":\n return <StepApproach />;\n\n case \"stack\":\n return <StepStack matrix={matrix} />;\n\n case \"stack-options\": {\n const stackName =\n getStackName(store.selectedStackId, matrix) || \"Selected Stack\";\n const techCount = getStackTechnologyCount(\n store.selectedStackId,\n matrix,\n );\n return (\n <StepStackOptions\n stackName={stackName}\n technologyCount={techCount}\n matrix={matrix}\n />\n );\n }\n\n case \"build\": {\n const currentDomain = store.getCurrentDomain();\n // For stack path with customize, use all domains from stack\n // For scratch path, use selectedDomains\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : [\"web\"]; // Default to web if no domains selected\n\n // DEBUG: trace data flow for pre-selection bug\n const allSelections = store.getAllSelectedTechnologies();\n console.log(\"DEBUG allSelections for Build step:\", allSelections);\n console.log(\n \"DEBUG store.domainSelections:\",\n JSON.stringify(store.domainSelections, null, 2),\n );\n\n return (\n <StepBuild\n matrix={matrix}\n domain={currentDomain || effectiveDomains[0] || \"web\"}\n selectedDomains={effectiveDomains}\n currentDomainIndex={store.currentDomainIndex}\n selections={store.domainSelections[currentDomain || \"web\"] || {}}\n allSelections={allSelections}\n focusedRow={store.focusedRow}\n focusedCol={store.focusedCol}\n showDescriptions={store.showDescriptions}\n expertMode={store.expertMode}\n onToggle={(subcategoryId, techId) => {\n const domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[subcategoryId];\n store.toggleTechnology(\n domain,\n subcategoryId,\n techId,\n cat?.exclusive ?? true,\n );\n }}\n onFocusChange={store.setFocus}\n onToggleDescriptions={store.toggleShowDescriptions}\n onToggleExpertMode={store.toggleExpertMode}\n onContinue={() => {\n if (!store.nextDomain()) {\n store.setStep(\"refine\");\n }\n }}\n onBack={() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }}\n />\n );\n }\n\n case \"refine\":\n return (\n <StepRefine\n technologyCount={store.getAllSelectedTechnologies().length}\n refineAction={store.refineAction}\n onSelectAction={store.setRefineAction}\n onContinue={() => store.setStep(\"confirm\")}\n onBack={store.goBack}\n />\n );\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId, matrix);\n return (\n <StepConfirm\n matrix={matrix}\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={store.getAllSelectedTechnologies().length}\n skillCount={store.getSelectedSkills().length}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n // Show warning if terminal is too narrow\n if (isNarrowTerminal) {\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">\n Terminal too narrow ({terminalWidth} columns). Please resize to at\n least {MIN_TERMINAL_WIDTH} columns.\n </Text>\n <Box marginTop={1}>\n <Text dimColor>Current width: {terminalWidth} columns</Text>\n </Box>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n {/* Header with version */}\n {version && (\n <Box marginBottom={1}>\n <Text dimColor>Claude Collective v{version}</Text>\n </Box>\n )}\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n />\n {renderStep()}\n </Box>\n </ThemeProvider>\n );\n};\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  init_esm_shims
4
4
  } from "./chunk-DHET7RCE.js";
5
5
 
6
- // src/cli-v2/lib/__tests__/test-constants.ts
6
+ // src/cli/lib/__tests__/test-constants.ts
7
7
  init_esm_shims();
8
8
  var ARROW_UP = "\x1B[A";
9
9
  var ARROW_DOWN = "\x1B[B";
@@ -28,4 +28,4 @@ export {
28
28
  RENDER_DELAY_MS,
29
29
  delay
30
30
  };
31
- //# sourceMappingURL=chunk-6LS7XO3H.js.map
31
+ //# sourceMappingURL=chunk-6Q3Y7KVB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/__tests__/test-constants.ts"],"sourcesContent":["/**\n * Shared test constants for CLI tests.\n *\n * Contains keyboard escape sequences and timing constants for ink-testing-library tests.\n */\n\n// =============================================================================\n// Keyboard Escape Sequences\n// =============================================================================\n\n/** Arrow Up key escape sequence */\nexport const ARROW_UP = \"\\x1B[A\";\n\n/** Arrow Down key escape sequence */\nexport const ARROW_DOWN = \"\\x1B[B\";\n\n/** Arrow Left key escape sequence */\nexport const ARROW_LEFT = \"\\x1B[D\";\n\n/** Arrow Right key escape sequence */\nexport const ARROW_RIGHT = \"\\x1B[C\";\n\n/** Enter key */\nexport const ENTER = \"\\r\";\n\n/** Escape key */\nexport const ESCAPE = \"\\x1B\";\n\n/** Ctrl+C key */\nexport const CTRL_C = \"\\x03\";\n\n/** Tab key */\nexport const TAB = \"\\t\";\n\n/** Backspace key */\nexport const BACKSPACE = \"\\x7F\";\n\n/** Letter Y for ConfirmInput */\nexport const KEY_Y = \"y\";\n\n/** Letter N for ConfirmInput */\nexport const KEY_N = \"n\";\n\n// =============================================================================\n// Timing Constants\n// =============================================================================\n\n/** Delay after keyboard input to allow terminal to process (ms) */\nexport const INPUT_DELAY_MS = 50;\n\n/** Delay for render/rerender operations (ms) */\nexport const RENDER_DELAY_MS = 100;\n\n/** Delay for complex multi-step operations (ms) */\nexport const OPERATION_DELAY_MS = 150;\n\n// =============================================================================\n// Test Utilities\n// =============================================================================\n\n/**\n * Create a delay promise for async tests.\n *\n * @param ms - Milliseconds to wait\n * @returns Promise that resolves after the delay\n */\nexport const delay = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n"],"mappings":";;;;;;AAAA;AAWO,IAAM,WAAW;AAGjB,IAAM,aAAa;AAGnB,IAAM,aAAa;AAGnB,IAAM,cAAc;AAGpB,IAAM,QAAQ;AAGd,IAAM,SAAS;AAMf,IAAM,MAAM;AAgBZ,IAAM,iBAAiB;AAGvB,IAAM,kBAAkB;AAexB,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  init_esm_shims
4
4
  } from "./chunk-DHET7RCE.js";
5
5
 
6
- // src/cli-v2/consts.ts
6
+ // src/cli/consts.ts
7
7
  init_esm_shims();
8
8
  import path from "path";
9
9
  import os from "os";
@@ -14,6 +14,7 @@ var isInDist = __dirname.includes("/dist");
14
14
  var CLI_ROOT = isInDist ? path.resolve(__dirname, "..") : path.resolve(__dirname, "../..");
15
15
  var PROJECT_ROOT = CLI_ROOT;
16
16
  var CLAUDE_DIR = ".claude";
17
+ var CLAUDE_SRC_DIR = ".claude-src";
17
18
  var PLUGINS_SUBDIR = "plugins";
18
19
  var PLUGIN_MANIFEST_DIR = ".claude-plugin";
19
20
  var PLUGIN_MANIFEST_FILE = "plugin.json";
@@ -42,6 +43,7 @@ var DEFAULT_PRESELECTED_SKILLS = [
42
43
  export {
43
44
  PROJECT_ROOT,
44
45
  CLAUDE_DIR,
46
+ CLAUDE_SRC_DIR,
45
47
  PLUGINS_SUBDIR,
46
48
  PLUGIN_MANIFEST_DIR,
47
49
  PLUGIN_MANIFEST_FILE,
@@ -54,4 +56,4 @@ export {
54
56
  DEFAULT_DISPLAY_VERSION,
55
57
  DEFAULT_PRESELECTED_SKILLS
56
58
  };
57
- //# sourceMappingURL=chunk-A3J6IAXK.js.map
59
+ //# sourceMappingURL=chunk-76DWXGQE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/consts.ts"],"sourcesContent":["import path from \"path\";\nimport os from \"os\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// After tsup build, dist/ is flat, so we go up one level from dist/ to get CLI root\n// In development (src/cli/consts.ts), we go up two levels\nconst isInDist = __dirname.includes(\"/dist\");\nexport const CLI_ROOT = isInDist\n ? path.resolve(__dirname, \"..\")\n : path.resolve(__dirname, \"../..\");\nexport const PROJECT_ROOT = CLI_ROOT;\n\nexport const OUTPUT_DIR = \".claude\";\nexport const GITHUB_REPO = \"claude-collective/skills\";\nexport const DEFAULT_MATRIX_PATH = \"src/config/skills-matrix.yaml\";\n\nexport const PLUGIN_NAME = \"claude-collective\";\n\nexport const CLAUDE_DIR = \".claude\";\nexport const CLAUDE_SRC_DIR = \".claude-src\";\nexport const PLUGINS_SUBDIR = \"plugins\";\nexport const PLUGIN_MANIFEST_DIR = \".claude-plugin\";\nexport const PLUGIN_MANIFEST_FILE = \"plugin.json\";\n\nexport const CACHE_DIR = path.join(os.homedir(), \".cache\", \"claude-collective\");\n\nexport const SKILLS_MATRIX_PATH = \"config/skills-matrix.yaml\";\nexport const SKILLS_DIR_PATH = \"src/skills\";\nexport const LOCAL_SKILLS_PATH = \".claude/skills\";\n\nexport const DIRS = {\n agents: \"src/agents\",\n skills: \"src/skills\",\n stacks: \"src/stacks\",\n templates: \"src/agents/_templates\",\n commands: \"src/commands\",\n} as const;\n\nexport const DEFAULT_VERSION = \"1.0.0\";\n\n/** Uses \"0.0.0\" to clearly indicate \"no version was explicitly set\" */\nexport const DEFAULT_DISPLAY_VERSION = \"0.0.0\";\n\n/**\n * Skills that are preselected by default in the wizard.\n * These are foundational methodology skills that apply to all projects.\n *\n * Note: Skill IDs are in normalized kebab-case format (no author suffix, slashes replaced with dashes).\n */\nexport const DEFAULT_PRESELECTED_SKILLS = [\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-context-management\",\n \"meta-methodology-improvement-protocol\",\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-success-criteria\",\n \"meta-methodology-write-verification\",\n] as const;\n"],"mappings":";;;;;;AAAA;AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAE9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAIzC,IAAM,WAAW,UAAU,SAAS,OAAO;AACpC,IAAM,WAAW,WACpB,KAAK,QAAQ,WAAW,IAAI,IAC5B,KAAK,QAAQ,WAAW,OAAO;AAC5B,IAAM,eAAe;AAQrB,IAAM,aAAa;AACnB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAE7B,IAAM,YAAY,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,mBAAmB;AAEvE,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAE1B,IAAM,OAAO;AAAA,EAClB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AACZ;AAEO,IAAM,kBAAkB;AAGxB,IAAM,0BAA0B;AAQhC,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}