@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.
- package/CHANGELOG.md +127 -0
- package/README.md +26 -9
- package/dist/{chunk-TOPAIL5W.js → chunk-3U3R4NCG.js} +2 -2
- package/dist/chunk-3U3R4NCG.js.map +1 -0
- package/dist/{chunk-YKXBGCFD.js → chunk-57Y5RALO.js} +10 -10
- package/dist/chunk-57Y5RALO.js.map +1 -0
- package/dist/{chunk-ED73HCW2.js → chunk-6DCSSORF.js} +37 -88
- package/dist/chunk-6DCSSORF.js.map +1 -0
- package/dist/{chunk-6LS7XO3H.js → chunk-6Q3Y7KVB.js} +2 -2
- package/dist/chunk-6Q3Y7KVB.js.map +1 -0
- package/dist/{chunk-A3J6IAXK.js → chunk-76DWXGQE.js} +4 -2
- package/dist/chunk-76DWXGQE.js.map +1 -0
- package/dist/{chunk-Q6DR5QUH.js → chunk-7Q44DMSP.js} +62 -27
- package/dist/chunk-7Q44DMSP.js.map +1 -0
- package/dist/chunk-ACNBKXXJ.js +321 -0
- package/dist/chunk-ACNBKXXJ.js.map +1 -0
- package/dist/{chunk-QGGSLMO3.js → chunk-B7CCVP6Q.js} +41 -9
- package/dist/chunk-B7CCVP6Q.js.map +1 -0
- package/dist/{chunk-LVKRVFYR.js → chunk-BDLUZVKU.js} +2 -2
- package/dist/chunk-BDLUZVKU.js.map +1 -0
- package/dist/{chunk-HNDT5QRB.js → chunk-CDX4W4DM.js} +3 -3
- package/dist/chunk-CDX4W4DM.js.map +1 -0
- package/dist/{chunk-MYAVQ23U.js → chunk-CJEHB4TB.js} +23 -9
- package/dist/chunk-CJEHB4TB.js.map +1 -0
- package/dist/{chunk-DKGL77IY.js → chunk-CPZOTVCI.js} +15 -14
- package/dist/chunk-CPZOTVCI.js.map +1 -0
- package/dist/{chunk-K7PTOVX4.js → chunk-D237EVNB.js} +32 -3
- package/dist/chunk-D237EVNB.js.map +1 -0
- package/dist/{chunk-Q2LH2DAB.js → chunk-DRXPNNPB.js} +19 -18
- package/dist/chunk-DRXPNNPB.js.map +1 -0
- package/dist/{chunk-Y3V43XCU.js → chunk-E3FJH4TF.js} +12 -8
- package/dist/chunk-E3FJH4TF.js.map +1 -0
- package/dist/{chunk-3HBTELJN.js → chunk-ED4E6Q2T.js} +10 -10
- package/dist/chunk-ED4E6Q2T.js.map +1 -0
- package/dist/{chunk-SYQ7R2JO.js → chunk-EHS3TWWP.js} +3 -3
- package/dist/chunk-EHS3TWWP.js.map +1 -0
- package/dist/{chunk-LQTST4WY.js → chunk-GDH553MV.js} +6 -6
- package/dist/chunk-GDH553MV.js.map +1 -0
- package/dist/{chunk-A65SBAAJ.js → chunk-HLJX2FTL.js} +31 -5
- package/dist/chunk-HLJX2FTL.js.map +1 -0
- package/dist/chunk-I2DSLOXZ.js +75 -0
- package/dist/chunk-I2DSLOXZ.js.map +1 -0
- package/dist/{chunk-SEBPPFUW.js → chunk-I4TPKIYX.js} +33 -18
- package/dist/chunk-I4TPKIYX.js.map +1 -0
- package/dist/{chunk-NGBFJJ7Q.js → chunk-IMDW5ZUP.js} +19 -11
- package/dist/chunk-IMDW5ZUP.js.map +1 -0
- package/dist/{chunk-U4VYHKPM.js → chunk-JIPWV2FX.js} +6 -6
- package/dist/chunk-JIPWV2FX.js.map +1 -0
- package/dist/{chunk-G2FBJOZG.js → chunk-K7EVM5LY.js} +4 -4
- package/dist/chunk-K7EVM5LY.js.map +1 -0
- package/dist/{chunk-MJSFR562.js → chunk-KAAEN2PO.js} +3 -3
- package/dist/chunk-KAAEN2PO.js.map +1 -0
- package/dist/{chunk-FNOYEXUE.js → chunk-LE6IY6IT.js} +22 -17
- package/dist/chunk-LE6IY6IT.js.map +1 -0
- package/dist/{chunk-CIY5UBRB.js → chunk-NDY25DTL.js} +6 -6
- package/dist/chunk-NDY25DTL.js.map +1 -0
- package/dist/{chunk-OLBOTK3O.js → chunk-P26A2K5N.js} +7 -7
- package/dist/chunk-P26A2K5N.js.map +1 -0
- package/dist/{chunk-DHFFRMF6.js → chunk-RTE64SJA.js} +2 -2
- package/dist/chunk-RTE64SJA.js.map +1 -0
- package/dist/{chunk-3ZCB5K33.js → chunk-SGJ23HIP.js} +14 -11
- package/dist/chunk-SGJ23HIP.js.map +1 -0
- package/dist/{chunk-C4ZTIYFR.js → chunk-SVYPSDWY.js} +10 -10
- package/dist/chunk-SVYPSDWY.js.map +1 -0
- package/dist/{chunk-MMDXNZPF.js → chunk-TKFPKEV3.js} +2 -2
- package/dist/chunk-TKFPKEV3.js.map +1 -0
- package/dist/{chunk-M7YCPFIX.js → chunk-UQTEPWU7.js} +2 -2
- package/dist/chunk-UQTEPWU7.js.map +1 -0
- package/dist/{chunk-QESUUPOE.js → chunk-V46GGCCI.js} +80 -27
- package/dist/chunk-V46GGCCI.js.map +1 -0
- package/dist/{chunk-UOWHJ6BE.js → chunk-X6QONICW.js} +6 -3
- package/dist/chunk-X6QONICW.js.map +1 -0
- package/dist/chunk-Y2LW7R3Y.js +23 -0
- package/dist/chunk-Y2LW7R3Y.js.map +1 -0
- package/dist/chunk-Z2CWURZ6.js +78 -0
- package/dist/chunk-Z2CWURZ6.js.map +1 -0
- package/dist/chunk-Z7G4B5HJ.js +377 -0
- package/dist/chunk-Z7G4B5HJ.js.map +1 -0
- package/dist/{chunk-XKEG3SCV.js → chunk-ZENYS6KW.js} +13 -9
- package/dist/chunk-ZENYS6KW.js.map +1 -0
- package/dist/{cli-v2 → cli}/defaults/agent-mappings.yaml +5 -5
- package/dist/commands/build/marketplace.js +9 -9
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +12 -12
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +15 -15
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +21 -21
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +9 -8
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +7 -6
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +8 -7
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +9 -8
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/set.js +9 -8
- package/dist/commands/config/set.js.map +1 -1
- package/dist/commands/config/show.js +6 -5
- package/dist/commands/config/unset-project.js +9 -8
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/config/unset.js +9 -8
- package/dist/commands/config/unset.js.map +1 -1
- package/dist/commands/diff.js +12 -12
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +10 -10
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +52 -49
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +180 -97
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +339 -0
- package/dist/commands/import/skill.js.map +1 -0
- package/dist/commands/info.js +9 -9
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +205 -78
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +9 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +19 -21
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +11 -12
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +12 -12
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +205 -17
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/test-imports.js +18 -18
- package/dist/commands/test-imports.js.map +1 -1
- package/dist/commands/uninstall.js +58 -78
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +21 -21
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +9 -9
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +8 -8
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +8 -8
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +7 -7
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +8 -8
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.js +1 -1
- package/dist/components/common/message.js +1 -1
- package/dist/components/common/message.js.map +1 -1
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/common/spinner.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +10 -0
- package/dist/components/skill-search/skill-search.js.map +1 -0
- package/dist/components/wizard/category-grid.js +1 -1
- package/dist/components/wizard/category-grid.test.js +213 -80
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +1 -1
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/step-approach.js +4 -3
- package/dist/components/wizard/step-build.js +4 -3
- package/dist/components/wizard/step-build.test.js +29 -17
- 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-refine.js +2 -1
- package/dist/components/wizard/step-refine.test.js +4 -3
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-stack-options.js +3 -3
- package/dist/components/wizard/step-stack.js +3 -3
- package/dist/components/wizard/wizard-footer.js +9 -0
- package/dist/components/wizard/wizard-footer.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +1 -1
- package/dist/components/wizard/wizard.js +14 -12
- package/dist/hooks/init.js +5 -4
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/stores/wizard-store.js +2 -2
- package/dist/stores/wizard-store.test.js +3 -3
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +3 -2
- package/dist/chunk-3HBTELJN.js.map +0 -1
- package/dist/chunk-3ZCB5K33.js.map +0 -1
- package/dist/chunk-6LS7XO3H.js.map +0 -1
- package/dist/chunk-A3J6IAXK.js.map +0 -1
- package/dist/chunk-A65SBAAJ.js.map +0 -1
- package/dist/chunk-ALEPJ6YN.js +0 -80
- package/dist/chunk-ALEPJ6YN.js.map +0 -1
- package/dist/chunk-C4ZTIYFR.js.map +0 -1
- package/dist/chunk-CIY5UBRB.js.map +0 -1
- package/dist/chunk-DHFFRMF6.js.map +0 -1
- package/dist/chunk-DKGL77IY.js.map +0 -1
- package/dist/chunk-ED73HCW2.js.map +0 -1
- package/dist/chunk-FNOYEXUE.js.map +0 -1
- package/dist/chunk-G2FBJOZG.js.map +0 -1
- package/dist/chunk-HNDT5QRB.js.map +0 -1
- package/dist/chunk-K7PTOVX4.js.map +0 -1
- package/dist/chunk-LQTST4WY.js.map +0 -1
- package/dist/chunk-LVKRVFYR.js.map +0 -1
- package/dist/chunk-M7YCPFIX.js.map +0 -1
- package/dist/chunk-MJSFR562.js.map +0 -1
- package/dist/chunk-MMDXNZPF.js.map +0 -1
- package/dist/chunk-MYAVQ23U.js.map +0 -1
- package/dist/chunk-NGBFJJ7Q.js.map +0 -1
- package/dist/chunk-OLBOTK3O.js.map +0 -1
- package/dist/chunk-PPNTD5LO.js +0 -330
- package/dist/chunk-PPNTD5LO.js.map +0 -1
- package/dist/chunk-Q2LH2DAB.js.map +0 -1
- package/dist/chunk-Q6DR5QUH.js.map +0 -1
- package/dist/chunk-QESUUPOE.js.map +0 -1
- package/dist/chunk-QGGSLMO3.js.map +0 -1
- package/dist/chunk-SEBPPFUW.js.map +0 -1
- package/dist/chunk-SYQ7R2JO.js.map +0 -1
- package/dist/chunk-TOPAIL5W.js.map +0 -1
- package/dist/chunk-U4VYHKPM.js.map +0 -1
- package/dist/chunk-UOWHJ6BE.js.map +0 -1
- package/dist/chunk-XKEG3SCV.js.map +0 -1
- package/dist/chunk-Y3V43XCU.js.map +0 -1
- 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
|
|
36
|
-
cc edit
|
|
37
|
-
cc compile
|
|
38
|
-
cc list
|
|
39
|
-
cc config
|
|
40
|
-
cc validate
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
10
|
+
} from "./chunk-ED4E6Q2T.js";
|
|
14
11
|
import {
|
|
15
|
-
|
|
16
|
-
} from "./chunk-
|
|
12
|
+
loadProjectConfig
|
|
13
|
+
} from "./chunk-CJEHB4TB.js";
|
|
17
14
|
import {
|
|
18
15
|
directoryExists
|
|
19
|
-
} from "./chunk-
|
|
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
|
|
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-
|
|
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-
|
|
7
|
+
} from "./chunk-HLJX2FTL.js";
|
|
5
8
|
import {
|
|
6
9
|
StepStack
|
|
7
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CDX4W4DM.js";
|
|
8
11
|
import {
|
|
9
12
|
WIZARD_STEPS,
|
|
10
13
|
WizardTabs
|
|
11
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-I2DSLOXZ.js";
|
|
12
15
|
import {
|
|
13
16
|
StepApproach
|
|
14
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-ZENYS6KW.js";
|
|
15
18
|
import {
|
|
16
19
|
StepBuild,
|
|
17
20
|
validateSelection
|
|
18
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7Q44DMSP.js";
|
|
19
22
|
import {
|
|
20
23
|
StepConfirm
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import {
|
|
23
|
-
StepRefine
|
|
24
|
-
} from "./chunk-Y3V43XCU.js";
|
|
24
|
+
} from "./chunk-X6QONICW.js";
|
|
25
25
|
import {
|
|
26
26
|
useWizardStore
|
|
27
|
-
} from "./chunk-
|
|
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
|
|
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(
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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":[]}
|