@claude-collective/cli 0.1.3 → 0.6.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 +133 -0
- package/README.md +1 -1
- package/dist/chunk-367K3JB3.js +84 -0
- package/dist/chunk-367K3JB3.js.map +1 -0
- package/dist/chunk-6ESUJMM7.js +54 -0
- package/dist/chunk-6ESUJMM7.js.map +1 -0
- package/dist/chunk-6OY6ZYQF.js +93 -0
- package/dist/chunk-6OY6ZYQF.js.map +1 -0
- package/dist/chunk-6WEQADPL.js +307 -0
- package/dist/chunk-6WEQADPL.js.map +1 -0
- package/dist/chunk-AU7XVCLO.js +91 -0
- package/dist/chunk-AU7XVCLO.js.map +1 -0
- package/dist/chunk-AZP2AA5M.js +425 -0
- package/dist/chunk-AZP2AA5M.js.map +1 -0
- package/dist/chunk-D4IQAT27.js +114 -0
- package/dist/chunk-D4IQAT27.js.map +1 -0
- package/dist/chunk-DHET7RCE.js +50 -0
- package/dist/chunk-DHET7RCE.js.map +1 -0
- package/dist/chunk-DHFFRMF6.js +31 -0
- package/dist/chunk-DHFFRMF6.js.map +1 -0
- package/dist/chunk-FKU7VSUD.js +453 -0
- package/dist/chunk-FKU7VSUD.js.map +1 -0
- package/dist/chunk-J2Y4A3LP.js +478 -0
- package/dist/chunk-J2Y4A3LP.js.map +1 -0
- package/dist/chunk-JMQGWQZU.js +607 -0
- package/dist/chunk-JMQGWQZU.js.map +1 -0
- package/dist/chunk-JY4RO76L.js +73 -0
- package/dist/chunk-JY4RO76L.js.map +1 -0
- package/dist/chunk-M7YCPFIX.js +108 -0
- package/dist/chunk-M7YCPFIX.js.map +1 -0
- package/dist/chunk-MJSFR562.js +57 -0
- package/dist/chunk-MJSFR562.js.map +1 -0
- package/dist/chunk-MMDXNZPF.js +69 -0
- package/dist/chunk-MMDXNZPF.js.map +1 -0
- package/dist/chunk-MYAVQ23U.js +356 -0
- package/dist/chunk-MYAVQ23U.js.map +1 -0
- package/dist/chunk-OSQDDJXX.js +146 -0
- package/dist/chunk-OSQDDJXX.js.map +1 -0
- package/dist/chunk-QESUUPOE.js +241 -0
- package/dist/chunk-QESUUPOE.js.map +1 -0
- package/dist/chunk-SJYG4EJZ.js +57 -0
- package/dist/chunk-SJYG4EJZ.js.map +1 -0
- package/dist/chunk-SYQ7R2JO.js +95 -0
- package/dist/chunk-SYQ7R2JO.js.map +1 -0
- package/dist/chunk-TD643KB3.js +245 -0
- package/dist/chunk-TD643KB3.js.map +1 -0
- package/dist/chunk-TFV6Z7F7.js +129 -0
- package/dist/chunk-TFV6Z7F7.js.map +1 -0
- package/dist/chunk-TGOHJCQ4.js +83 -0
- package/dist/chunk-TGOHJCQ4.js.map +1 -0
- package/dist/chunk-TOPAIL5W.js +22 -0
- package/dist/chunk-TOPAIL5W.js.map +1 -0
- package/dist/chunk-U4VYHKPM.js +110 -0
- package/dist/chunk-U4VYHKPM.js.map +1 -0
- package/dist/chunk-UFWNMW3G.js +392 -0
- package/dist/chunk-UFWNMW3G.js.map +1 -0
- package/dist/chunk-UNHCZRO4.js +64 -0
- package/dist/chunk-UNHCZRO4.js.map +1 -0
- package/dist/chunk-URDV4OCP.js +308 -0
- package/dist/chunk-URDV4OCP.js.map +1 -0
- package/dist/chunk-YI6JVSFO.js +43 -0
- package/dist/chunk-YI6JVSFO.js.map +1 -0
- package/dist/chunk-YNSNRR5D.js +184 -0
- package/dist/chunk-YNSNRR5D.js.map +1 -0
- package/dist/chunk-Z6DLWTBY.js +46 -0
- package/dist/chunk-Z6DLWTBY.js.map +1 -0
- package/dist/chunk-ZDQIUHAM.js +89 -0
- package/dist/chunk-ZDQIUHAM.js.map +1 -0
- package/dist/chunk-ZSKHDU5P.js +124 -0
- package/dist/chunk-ZSKHDU5P.js.map +1 -0
- package/dist/cli-v2/defaults/agent-mappings.yaml +185 -0
- package/dist/commands/build/marketplace.js +295 -0
- package/dist/commands/build/marketplace.js.map +1 -0
- package/dist/commands/build/plugins.js +362 -0
- package/dist/commands/build/plugins.js.map +1 -0
- package/dist/commands/build/stack.js +169 -0
- package/dist/commands/build/stack.js.map +1 -0
- package/dist/commands/compile.js +461 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config/get.js +60 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/index.js +22 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/path.js +35 -0
- package/dist/commands/config/path.js.map +1 -0
- package/dist/commands/config/set-project.js +61 -0
- package/dist/commands/config/set-project.js.map +1 -0
- package/dist/commands/config/set.js +60 -0
- package/dist/commands/config/set.js.map +1 -0
- package/dist/commands/config/show.js +13 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/config/unset-project.js +57 -0
- package/dist/commands/config/unset-project.js.map +1 -0
- package/dist/commands/config/unset.js +56 -0
- package/dist/commands/config/unset.js.map +1 -0
- package/dist/commands/diff.js +755 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.js +413 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/edit.js +253 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/eject.js +208 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/info.js +205 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +914 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.js +44 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/new/agent.js +230 -0
- package/dist/commands/new/agent.js.map +1 -0
- package/dist/commands/new/skill.js +204 -0
- package/dist/commands/new/skill.js.map +1 -0
- package/dist/commands/outdated.js +242 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/search.js +115 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/test-imports.js +92 -0
- package/dist/commands/test-imports.js.map +1 -0
- package/dist/commands/uninstall.js +302 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +428 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +375 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version/bump.js +95 -0
- package/dist/commands/version/bump.js.map +1 -0
- package/dist/commands/version/index.js +70 -0
- package/dist/commands/version/index.js.map +1 -0
- package/dist/commands/version/set.js +101 -0
- package/dist/commands/version/set.js.map +1 -0
- package/dist/commands/version/show.js +70 -0
- package/dist/commands/version/show.js.map +1 -0
- package/dist/components/common/confirm.js +9 -0
- package/dist/components/common/confirm.js.map +1 -0
- package/dist/components/common/message.js +24 -0
- package/dist/components/common/message.js.map +1 -0
- package/dist/components/common/spinner.js +14 -0
- package/dist/components/common/spinner.js.map +1 -0
- package/dist/components/wizard/selection-header.js +11 -0
- package/dist/components/wizard/selection-header.js.map +1 -0
- package/dist/components/wizard/step-approach.js +11 -0
- package/dist/components/wizard/step-approach.js.map +1 -0
- package/dist/components/wizard/step-category.js +12 -0
- package/dist/components/wizard/step-category.js.map +1 -0
- package/dist/components/wizard/step-confirm.js +12 -0
- package/dist/components/wizard/step-confirm.js.map +1 -0
- package/dist/components/wizard/step-stack.js +11 -0
- package/dist/components/wizard/step-stack.js.map +1 -0
- package/dist/components/wizard/step-subcategory.js +13 -0
- package/dist/components/wizard/step-subcategory.js.map +1 -0
- package/dist/components/wizard/wizard.js +19 -0
- package/dist/components/wizard/wizard.js.map +1 -0
- package/dist/hooks/init.js +41 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-RGXYGAW3.js +1316 -0
- package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
- package/dist/stores/wizard-store.js +10 -0
- package/dist/stores/wizard-store.js.map +1 -0
- package/dist/stores/wizard-store.test.js +15991 -0
- package/dist/stores/wizard-store.test.js.map +1 -0
- package/package.json +44 -25
- package/dist/cli/index.js +0 -6253
- package/dist/cli/index.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,139 @@ 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.6.0] - 2026-02-01
|
|
9
|
+
|
|
10
|
+
### Breaking Changes
|
|
11
|
+
|
|
12
|
+
- **Skills now defined in stacks, not agents** - Previously, each agent YAML contained a `skills` field. Now, stacks define technology selections per agent in `config/stacks.yaml`. Skills are resolved via `skill_aliases` in the skills matrix. This fixes the bug where stacks got wrong skills (e.g., angular-stack getting React skills).
|
|
13
|
+
- **stacks.yaml schema changed** - Agents are now objects with subcategory→technology mappings (e.g., `web-developer: { framework: react, styling: scss-modules }`) instead of simple string lists.
|
|
14
|
+
- **Removed `skills` field from agent schema** - Agent YAMLs no longer contain skill definitions.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`stack` property in consumer config.yaml** - When a stack is selected, the resolved agent→skill mappings are stored in the project config for reproducibility.
|
|
19
|
+
- **`resolveAgentSkillsFromStack()`** - New function in resolver.ts to extract skills from stack configurations.
|
|
20
|
+
- **`resolveStackSkillsFromAliases()`** - New function in stacks-loader.ts to resolve technology selections to skill IDs via the matrix.
|
|
21
|
+
- **Phase 7 UX specification** - Comprehensive documentation for upcoming wizard UX redesign with domain-based navigation and grid-based skill selection.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- `loadStackById()` now reads technology selections per agent from the new stacks.yaml format
|
|
26
|
+
- `getAgentSkills()` now accepts optional `stack` and `skillAliases` parameters for Phase 7 skill resolution
|
|
27
|
+
- `stackToResolvedStack()` extracts skills from stack configurations instead of agent YAMLs
|
|
28
|
+
- Stack plugin compiler now extracts skills via matrix aliases
|
|
29
|
+
|
|
30
|
+
### Removed
|
|
31
|
+
|
|
32
|
+
- `skills` field from all 18 agent YAMLs - skills now come from stacks
|
|
33
|
+
- `skills` property from agent.schema.json
|
|
34
|
+
|
|
35
|
+
[0.6.0]: https://github.com/claude-collective/cli/releases/tag/v0.6.0
|
|
36
|
+
|
|
37
|
+
## [0.5.1] - 2026-02-01
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **Auto-detection of installation mode** - CLI now automatically detects whether you have a local (`.claude/`) or plugin (`.claude/plugins/claude-collective/`) installation. No more `--output` flag needed for local mode.
|
|
42
|
+
- **`installMode` property in config.yaml** - new installations now store `installMode: local | plugin` explicitly in config
|
|
43
|
+
- **`detectInstallation()` utility** - shared function for consistent installation detection across commands
|
|
44
|
+
- **Local template support** - `compile` now uses templates from `.claude/templates/` if present (after running `eject templates`)
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- `cc compile` - auto-detects local mode and outputs to `.claude/agents` without needing `--output` flag
|
|
49
|
+
- `cc list` - now works for both local and plugin mode installations, shows mode in output
|
|
50
|
+
- `cc edit` - now works with local mode installations
|
|
51
|
+
- `nextjs-fullstack` stack - now includes all 18 agents (added `cli-tester` and `cli-migrator`)
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Local templates not being used after `eject templates` - compile now correctly checks for `.claude/templates/` before falling back to CLI bundled templates
|
|
56
|
+
|
|
57
|
+
[0.5.1]: https://github.com/claude-collective/cli/releases/tag/v0.5.1
|
|
58
|
+
|
|
59
|
+
## [0.5.0] - 2026-02-01
|
|
60
|
+
|
|
61
|
+
### Breaking Changes
|
|
62
|
+
|
|
63
|
+
- **Agent-centric configuration** - skills are now defined in agent YAMLs instead of stack config files. Stacks are now simple agent groupings in `config/stacks.yaml`. This is a significant architectural change that simplifies configuration but requires migration for custom stacks.
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
|
|
67
|
+
- **Skills in agent YAMLs** - each agent now defines its own skills with a `preloaded` flag to control what's included in the agent prompt
|
|
68
|
+
- **Centralized stacks.yaml** - all 7 stacks (nextjs-fullstack, angular, nuxt, remix, vue, solidjs, react-native) are now defined in `config/stacks.yaml` with agent lists and philosophy
|
|
69
|
+
- **stacks-loader** - new module to load stacks from config/stacks.yaml
|
|
70
|
+
- **resolveAgentSkills()** - function to extract skills from agent definitions
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- `loadStackById()` now loads from `config/stacks.yaml` (new format) instead of `src/stacks/*/config.yaml`
|
|
75
|
+
- `getAgentSkills()` priority order: compile config > agent skills > stack-based (legacy)
|
|
76
|
+
- `stackToResolvedStack()` now extracts skill IDs from agent definitions
|
|
77
|
+
- `build:stack` command deprecated (shows warning and exits)
|
|
78
|
+
|
|
79
|
+
### Removed
|
|
80
|
+
|
|
81
|
+
- Stack config files (`src/stacks/*/config.yaml`) - skills now come from agent YAMLs
|
|
82
|
+
- `suggested_stacks` section from `skills-matrix.yaml` - moved to `stacks.yaml`
|
|
83
|
+
|
|
84
|
+
### Internal
|
|
85
|
+
|
|
86
|
+
- Updated all 17 agent YAMLs with skills fields
|
|
87
|
+
- Deprecated `skill-agent-mappings.ts` (kept for wizard fallback)
|
|
88
|
+
- Updated tests to work with new stack format (passing Stack objects instead of writing config files)
|
|
89
|
+
|
|
90
|
+
[0.5.0]: https://github.com/claude-collective/cli/releases/tag/v0.5.0
|
|
91
|
+
|
|
92
|
+
## [0.4.0] - 2026-01-31
|
|
93
|
+
|
|
94
|
+
### Added
|
|
95
|
+
|
|
96
|
+
- **Methodology skills preselected** - foundational skills (anti-over-engineering, context-management, investigation-requirements, success-criteria, write-verification, improvement-protocol) are now selected by default in the wizard
|
|
97
|
+
- **CLI skills in nextjs-fullstack** - stack now includes cli-commander, cli-reviewing, and setup skills for posthog, email, and observability
|
|
98
|
+
- **Test isolation support** - `CC_CONFIG_HOME` environment variable allows overriding the global config directory
|
|
99
|
+
- **Comprehensive test suite** - 1000+ tests covering commands, components, and user journeys
|
|
100
|
+
|
|
101
|
+
### Internal
|
|
102
|
+
|
|
103
|
+
- Added cli-migrator and cli-tester agents for CLI development workflows
|
|
104
|
+
- Added research documentation for CLI testing strategies and stack simplification
|
|
105
|
+
|
|
106
|
+
[0.4.0]: https://github.com/claude-collective/cli/releases/tag/v0.4.0
|
|
107
|
+
|
|
108
|
+
## [0.3.0] - 2026-01-31
|
|
109
|
+
|
|
110
|
+
### Changed
|
|
111
|
+
|
|
112
|
+
- **CLI Framework Migration** - migrated from Commander.js + @clack/prompts to oclif + Ink for improved maintainability and extensibility
|
|
113
|
+
- All commands now use oclif's class-based command structure
|
|
114
|
+
- Interactive components now use Ink (React-based terminal UI)
|
|
115
|
+
- Wizard state management now uses Zustand
|
|
116
|
+
- Removed dependencies: commander, @clack/prompts, @clack/core, picocolors
|
|
117
|
+
- Added dependencies: @oclif/core, @oclif/plugin-\*, ink, react, @inkjs/ui, zustand
|
|
118
|
+
|
|
119
|
+
[0.3.0]: https://github.com/claude-collective/cli/releases/tag/v0.3.0
|
|
120
|
+
|
|
121
|
+
## [0.2.0] - 2026-01-30
|
|
122
|
+
|
|
123
|
+
### Added
|
|
124
|
+
|
|
125
|
+
- **Marketplace support** - install stack plugins directly from configured marketplaces
|
|
126
|
+
- Marketplace field in project and global config for plugin installation
|
|
127
|
+
- CLI utilities for marketplace management (`marketplace list`, `exists`, `add`)
|
|
128
|
+
- Multi-source agent loading - agents can now be loaded from both CLI and custom sources
|
|
129
|
+
- `sourceRoot` tracking for correct template resolution with multi-source agents
|
|
130
|
+
|
|
131
|
+
### Changed
|
|
132
|
+
|
|
133
|
+
- Removed skills eject functionality (use marketplace plugins instead)
|
|
134
|
+
|
|
135
|
+
### Fixed
|
|
136
|
+
|
|
137
|
+
- Wizard now preserves approach selection state when toggling Expert Mode or Install Mode
|
|
138
|
+
|
|
139
|
+
[0.2.0]: https://github.com/claude-collective/cli/releases/tag/v0.2.0
|
|
140
|
+
|
|
8
141
|
## [0.1.3] - 2026-01-30
|
|
9
142
|
|
|
10
143
|
### Added
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ skills live in the [claude-collective/skills](https://github.com/claude-collecti
|
|
|
51
51
|
| web | react 19, next.js, remix, vue, angular, solidjs, scss-modules, zustand, react-query |
|
|
52
52
|
| api | hono, drizzle, better-auth, posthog, resend, axiom+pino+sentry |
|
|
53
53
|
| mobile | react-native, expo |
|
|
54
|
-
| cli |
|
|
54
|
+
| cli | oclif, ink |
|
|
55
55
|
| infra | turborepo, github-actions, env config |
|
|
56
56
|
| security | auth patterns, xss prevention, secrets |
|
|
57
57
|
| meta | code reviewing, research methodology |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
fetchFromSource
|
|
4
|
+
} from "./chunk-ZSKHDU5P.js";
|
|
5
|
+
import {
|
|
6
|
+
CLAUDE_DIR,
|
|
7
|
+
DIRS,
|
|
8
|
+
PROJECT_ROOT
|
|
9
|
+
} from "./chunk-SJYG4EJZ.js";
|
|
10
|
+
import {
|
|
11
|
+
verbose
|
|
12
|
+
} from "./chunk-TOPAIL5W.js";
|
|
13
|
+
import {
|
|
14
|
+
directoryExists
|
|
15
|
+
} from "./chunk-MMDXNZPF.js";
|
|
16
|
+
import {
|
|
17
|
+
init_esm_shims
|
|
18
|
+
} from "./chunk-DHET7RCE.js";
|
|
19
|
+
|
|
20
|
+
// src/cli-v2/lib/agent-fetcher.ts
|
|
21
|
+
init_esm_shims();
|
|
22
|
+
import path from "path";
|
|
23
|
+
async function getAgentDefinitions(remoteSource, options = {}) {
|
|
24
|
+
if (remoteSource) {
|
|
25
|
+
return fetchAgentDefinitionsFromRemote(remoteSource, options);
|
|
26
|
+
}
|
|
27
|
+
return getLocalAgentDefinitions(options);
|
|
28
|
+
}
|
|
29
|
+
async function getLocalAgentDefinitions(options = {}) {
|
|
30
|
+
const agentsDir = path.join(PROJECT_ROOT, DIRS.agents);
|
|
31
|
+
let templatesDir = path.join(PROJECT_ROOT, DIRS.templates);
|
|
32
|
+
if (!await directoryExists(agentsDir)) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Agent partials not found at: ${agentsDir}. Ensure the CLI is properly installed.`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
if (options.projectDir) {
|
|
38
|
+
const localTemplatesDir = path.join(
|
|
39
|
+
options.projectDir,
|
|
40
|
+
CLAUDE_DIR,
|
|
41
|
+
"templates"
|
|
42
|
+
);
|
|
43
|
+
if (await directoryExists(localTemplatesDir)) {
|
|
44
|
+
verbose(`Using local templates from: ${localTemplatesDir}`);
|
|
45
|
+
templatesDir = localTemplatesDir;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (!await directoryExists(templatesDir)) {
|
|
49
|
+
verbose(`Templates directory not found: ${templatesDir}`);
|
|
50
|
+
}
|
|
51
|
+
verbose(`Agent partials loaded from CLI: ${agentsDir}`);
|
|
52
|
+
verbose(`Templates directory: ${templatesDir}`);
|
|
53
|
+
return {
|
|
54
|
+
agentsDir,
|
|
55
|
+
templatesDir,
|
|
56
|
+
sourcePath: PROJECT_ROOT
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function fetchAgentDefinitionsFromRemote(source, options = {}) {
|
|
60
|
+
verbose(`Fetching agent partials from remote: ${source}`);
|
|
61
|
+
const result = await fetchFromSource(source, {
|
|
62
|
+
forceRefresh: options.forceRefresh,
|
|
63
|
+
subdir: ""
|
|
64
|
+
});
|
|
65
|
+
const agentsDir = path.join(result.path, "src", "agents");
|
|
66
|
+
const templatesDir = path.join(agentsDir, "_templates");
|
|
67
|
+
if (!await directoryExists(agentsDir)) {
|
|
68
|
+
throw new Error(`Agent partials not found at: ${agentsDir}`);
|
|
69
|
+
}
|
|
70
|
+
if (!await directoryExists(templatesDir)) {
|
|
71
|
+
verbose(`Templates directory not found: ${templatesDir}`);
|
|
72
|
+
}
|
|
73
|
+
verbose(`Agent partials fetched from: ${result.path}`);
|
|
74
|
+
return {
|
|
75
|
+
agentsDir,
|
|
76
|
+
templatesDir,
|
|
77
|
+
sourcePath: result.path
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export {
|
|
82
|
+
getAgentDefinitions
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=chunk-367K3JB3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/lib/agent-fetcher.ts"],"sourcesContent":["import path from \"path\";\nimport { directoryExists } from \"../utils/fs\";\nimport { verbose } from \"../utils/logger\";\nimport { PROJECT_ROOT, DIRS, CLAUDE_DIR } from \"../consts\";\nimport { fetchFromSource, type FetchOptions } from \"./source-fetcher\";\nimport type { AgentSourcePaths } from \"../../types\";\n\nexport interface AgentDefinitionOptions extends FetchOptions {\n /** Project directory to check for local templates */\n projectDir?: string;\n}\n\nexport async function getAgentDefinitions(\n remoteSource?: string,\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n if (remoteSource) {\n return fetchAgentDefinitionsFromRemote(remoteSource, options);\n }\n return getLocalAgentDefinitions(options);\n}\n\nexport async function getLocalAgentDefinitions(\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n const agentsDir = path.join(PROJECT_ROOT, DIRS.agents);\n let templatesDir = path.join(PROJECT_ROOT, DIRS.templates);\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(\n `Agent partials not found at: ${agentsDir}. ` +\n `Ensure the CLI is properly installed.`,\n );\n }\n\n // Check for local templates first (from eject templates)\n if (options.projectDir) {\n const localTemplatesDir = path.join(\n options.projectDir,\n CLAUDE_DIR,\n \"templates\",\n );\n if (await directoryExists(localTemplatesDir)) {\n verbose(`Using local templates from: ${localTemplatesDir}`);\n templatesDir = localTemplatesDir;\n }\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials loaded from CLI: ${agentsDir}`);\n verbose(`Templates directory: ${templatesDir}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: PROJECT_ROOT,\n };\n}\n\nexport async function fetchAgentDefinitionsFromRemote(\n source: string,\n options: FetchOptions = {},\n): Promise<AgentSourcePaths> {\n verbose(`Fetching agent partials from remote: ${source}`);\n\n const result = await fetchFromSource(source, {\n forceRefresh: options.forceRefresh,\n subdir: \"\",\n });\n\n const agentsDir = path.join(result.path, \"src\", \"agents\");\n const templatesDir = path.join(agentsDir, \"_templates\");\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(`Agent partials not found at: ${agentsDir}`);\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials fetched from: ${result.path}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: result.path,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA,OAAO,UAAU;AAYjB,eAAsB,oBACpB,cACA,UAAkC,CAAC,GACR;AAC3B,MAAI,cAAc;AAChB,WAAO,gCAAgC,cAAc,OAAO;AAAA,EAC9D;AACA,SAAO,yBAAyB,OAAO;AACzC;AAEA,eAAsB,yBACpB,UAAkC,CAAC,GACR;AAC3B,QAAM,YAAY,KAAK,KAAK,cAAc,KAAK,MAAM;AACrD,MAAI,eAAe,KAAK,KAAK,cAAc,KAAK,SAAS;AAEzD,MAAI,CAAE,MAAM,gBAAgB,SAAS,GAAI;AACvC,UAAM,IAAI;AAAA,MACR,gCAAgC,SAAS;AAAA,IAE3C;AAAA,EACF;AAGA,MAAI,QAAQ,YAAY;AACtB,UAAM,oBAAoB,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,QAAI,MAAM,gBAAgB,iBAAiB,GAAG;AAC5C,cAAQ,+BAA+B,iBAAiB,EAAE;AAC1D,qBAAe;AAAA,IACjB;AAAA,EACF;AAEA,MAAI,CAAE,MAAM,gBAAgB,YAAY,GAAI;AAC1C,YAAQ,kCAAkC,YAAY,EAAE;AAAA,EAC1D;AAEA,UAAQ,mCAAmC,SAAS,EAAE;AACtD,UAAQ,wBAAwB,YAAY,EAAE;AAE9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEA,eAAsB,gCACpB,QACA,UAAwB,CAAC,GACE;AAC3B,UAAQ,wCAAwC,MAAM,EAAE;AAExD,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,YAAY,KAAK,KAAK,OAAO,MAAM,OAAO,QAAQ;AACxD,QAAM,eAAe,KAAK,KAAK,WAAW,YAAY;AAEtD,MAAI,CAAE,MAAM,gBAAgB,SAAS,GAAI;AACvC,UAAM,IAAI,MAAM,gCAAgC,SAAS,EAAE;AAAA,EAC7D;AAEA,MAAI,CAAE,MAAM,gBAAgB,YAAY,GAAI;AAC1C,YAAQ,kCAAkC,YAAY,EAAE;AAAA,EAC1D;AAEA,UAAQ,gCAAgC,OAAO,IAAI,EAAE;AAErD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,OAAO;AAAA,EACrB;AACF;","names":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
loadProjectConfig
|
|
4
|
+
} from "./chunk-MYAVQ23U.js";
|
|
5
|
+
import {
|
|
6
|
+
getCollectivePluginDir
|
|
7
|
+
} from "./chunk-D4IQAT27.js";
|
|
8
|
+
import {
|
|
9
|
+
CLAUDE_DIR
|
|
10
|
+
} from "./chunk-SJYG4EJZ.js";
|
|
11
|
+
import {
|
|
12
|
+
directoryExists,
|
|
13
|
+
fileExists
|
|
14
|
+
} from "./chunk-MMDXNZPF.js";
|
|
15
|
+
import {
|
|
16
|
+
init_esm_shims
|
|
17
|
+
} from "./chunk-DHET7RCE.js";
|
|
18
|
+
|
|
19
|
+
// src/cli-v2/lib/installation.ts
|
|
20
|
+
init_esm_shims();
|
|
21
|
+
import path from "path";
|
|
22
|
+
async function detectInstallation(projectDir = process.cwd()) {
|
|
23
|
+
const localConfigPath = path.join(projectDir, CLAUDE_DIR, "config.yaml");
|
|
24
|
+
if (await fileExists(localConfigPath)) {
|
|
25
|
+
const loaded = await loadProjectConfig(projectDir);
|
|
26
|
+
const mode = loaded?.config?.installMode ?? "local";
|
|
27
|
+
if (mode === "local") {
|
|
28
|
+
return {
|
|
29
|
+
mode: "local",
|
|
30
|
+
configPath: localConfigPath,
|
|
31
|
+
agentsDir: path.join(projectDir, CLAUDE_DIR, "agents"),
|
|
32
|
+
skillsDir: path.join(projectDir, CLAUDE_DIR, "skills"),
|
|
33
|
+
projectDir
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const pluginDir = getCollectivePluginDir(projectDir);
|
|
38
|
+
const pluginConfigPath = path.join(pluginDir, "config.yaml");
|
|
39
|
+
if (await directoryExists(pluginDir)) {
|
|
40
|
+
return {
|
|
41
|
+
mode: "plugin",
|
|
42
|
+
configPath: pluginConfigPath,
|
|
43
|
+
agentsDir: path.join(pluginDir, "agents"),
|
|
44
|
+
skillsDir: path.join(pluginDir, "skills"),
|
|
45
|
+
projectDir
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
detectInstallation
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=chunk-6ESUJMM7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/lib/installation.ts"],"sourcesContent":["/**\n * Installation detection utilities for Claude Collective.\n *\n * Detects whether a project uses local mode (.claude/config.yaml) or\n * plugin mode (.claude/plugins/claude-collective/).\n */\nimport path from \"path\";\nimport { directoryExists, fileExists } from \"../utils/fs\";\nimport { loadProjectConfig } from \"./project-config\";\nimport { getCollectivePluginDir } from \"./plugin-finder\";\nimport { CLAUDE_DIR } from \"../consts\";\n\nexport type InstallMode = \"local\" | \"plugin\";\n\nexport interface Installation {\n mode: InstallMode;\n configPath: string;\n agentsDir: string;\n skillsDir: string;\n projectDir: string;\n}\n\n/**\n * Detect the current installation mode by checking for local config first.\n * Priority: Local (.claude/config.yaml with installMode: local) > Plugin\n */\nexport async function detectInstallation(\n projectDir: string = process.cwd(),\n): Promise<Installation | null> {\n // 1. Check for local installation first\n const localConfigPath = path.join(projectDir, CLAUDE_DIR, \"config.yaml\");\n\n if (await fileExists(localConfigPath)) {\n const loaded = await loadProjectConfig(projectDir);\n\n // If config exists and has installMode: local (or no installMode, defaults to local)\n // treat it as local mode\n const mode: InstallMode = loaded?.config?.installMode ?? \"local\";\n\n if (mode === \"local\") {\n return {\n mode: \"local\",\n configPath: localConfigPath,\n agentsDir: path.join(projectDir, CLAUDE_DIR, \"agents\"),\n skillsDir: path.join(projectDir, CLAUDE_DIR, \"skills\"),\n projectDir,\n };\n }\n }\n\n // 2. Check for plugin installation\n const pluginDir = getCollectivePluginDir(projectDir);\n const pluginConfigPath = path.join(pluginDir, \"config.yaml\");\n\n if (await directoryExists(pluginDir)) {\n return {\n mode: \"plugin\",\n configPath: pluginConfigPath,\n agentsDir: path.join(pluginDir, \"agents\"),\n skillsDir: path.join(pluginDir, \"skills\"),\n projectDir,\n };\n }\n\n // No installation found\n return null;\n}\n\n/**\n * Get installation or throw with helpful error message\n */\nexport async function getInstallationOrThrow(\n projectDir: string = process.cwd(),\n): Promise<Installation> {\n const installation = await detectInstallation(projectDir);\n\n if (!installation) {\n throw new Error(\n \"No Claude Collective installation found.\\n\" +\n \"Run 'cc init' to create one.\",\n );\n }\n\n return installation;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAMA,OAAO,UAAU;AAoBjB,eAAsB,mBACpB,aAAqB,QAAQ,IAAI,GACH;AAE9B,QAAM,kBAAkB,KAAK,KAAK,YAAY,YAAY,aAAa;AAEvE,MAAI,MAAM,WAAW,eAAe,GAAG;AACrC,UAAM,SAAS,MAAM,kBAAkB,UAAU;AAIjD,UAAM,OAAoB,QAAQ,QAAQ,eAAe;AAEzD,QAAI,SAAS,SAAS;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAW,KAAK,KAAK,YAAY,YAAY,QAAQ;AAAA,QACrD,WAAW,KAAK,KAAK,YAAY,YAAY,QAAQ;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,YAAY,uBAAuB,UAAU;AACnD,QAAM,mBAAmB,KAAK,KAAK,WAAW,aAAa;AAE3D,MAAI,MAAM,gBAAgB,SAAS,GAAG;AACpC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAW,KAAK,KAAK,WAAW,QAAQ;AAAA,MACxC,WAAW,KAAK,KAAK,WAAW,QAAQ;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAGA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_PRESELECTED_SKILLS
|
|
4
|
+
} from "./chunk-SJYG4EJZ.js";
|
|
5
|
+
import {
|
|
6
|
+
init_esm_shims
|
|
7
|
+
} from "./chunk-DHET7RCE.js";
|
|
8
|
+
|
|
9
|
+
// src/cli-v2/stores/wizard-store.ts
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
import { create } from "zustand";
|
|
12
|
+
var createInitialState = (options) => {
|
|
13
|
+
const hasInitialSkills = options?.initialSkills && options.initialSkills.length > 0;
|
|
14
|
+
const baseSkills = [...DEFAULT_PRESELECTED_SKILLS];
|
|
15
|
+
const initialSkills = options?.initialSkills ?? [];
|
|
16
|
+
const combinedSkills = [.../* @__PURE__ */ new Set([...baseSkills, ...initialSkills])];
|
|
17
|
+
return {
|
|
18
|
+
step: hasInitialSkills ? "category" : "approach",
|
|
19
|
+
selectedSkills: combinedSkills,
|
|
20
|
+
selectedStack: null,
|
|
21
|
+
expertMode: options?.hasLocalSkills ?? false,
|
|
22
|
+
installMode: "local",
|
|
23
|
+
history: [],
|
|
24
|
+
currentTopCategory: null,
|
|
25
|
+
currentSubcategory: null,
|
|
26
|
+
visitedCategories: /* @__PURE__ */ new Set(),
|
|
27
|
+
lastSelectedCategory: null,
|
|
28
|
+
lastSelectedSubcategory: null,
|
|
29
|
+
lastSelectedSkill: null,
|
|
30
|
+
lastSelectedApproach: null
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
var useWizardStore = create((set, get) => ({
|
|
34
|
+
...createInitialState(),
|
|
35
|
+
setStep: (step) => set((state) => ({
|
|
36
|
+
step,
|
|
37
|
+
history: [...state.history, state.step]
|
|
38
|
+
})),
|
|
39
|
+
toggleSkill: (skillId) => set((state) => {
|
|
40
|
+
const isSelected = state.selectedSkills.includes(skillId);
|
|
41
|
+
return {
|
|
42
|
+
selectedSkills: isSelected ? state.selectedSkills.filter((id) => id !== skillId) : [...state.selectedSkills, skillId]
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
selectStack: (stack) => set({
|
|
46
|
+
selectedStack: stack,
|
|
47
|
+
// Include preselected skills (methodology) plus stack skills
|
|
48
|
+
selectedSkills: stack ? [.../* @__PURE__ */ new Set([...DEFAULT_PRESELECTED_SKILLS, ...stack.allSkillIds])] : [...DEFAULT_PRESELECTED_SKILLS]
|
|
49
|
+
}),
|
|
50
|
+
toggleExpertMode: () => set((state) => ({
|
|
51
|
+
expertMode: !state.expertMode
|
|
52
|
+
})),
|
|
53
|
+
toggleInstallMode: () => set((state) => ({
|
|
54
|
+
installMode: state.installMode === "plugin" ? "local" : "plugin"
|
|
55
|
+
})),
|
|
56
|
+
setCategory: (category) => set({
|
|
57
|
+
currentTopCategory: category
|
|
58
|
+
}),
|
|
59
|
+
setSubcategory: (subcategory) => set({
|
|
60
|
+
currentSubcategory: subcategory
|
|
61
|
+
}),
|
|
62
|
+
setLastSelectedCategory: (category) => set({
|
|
63
|
+
lastSelectedCategory: category
|
|
64
|
+
}),
|
|
65
|
+
setLastSelectedSubcategory: (subcategory) => set({
|
|
66
|
+
lastSelectedSubcategory: subcategory
|
|
67
|
+
}),
|
|
68
|
+
setLastSelectedSkill: (skillId) => set({
|
|
69
|
+
lastSelectedSkill: skillId
|
|
70
|
+
}),
|
|
71
|
+
setLastSelectedApproach: (approach) => set({
|
|
72
|
+
lastSelectedApproach: approach
|
|
73
|
+
}),
|
|
74
|
+
markCategoryVisited: (category) => set((state) => {
|
|
75
|
+
const visited = new Set(state.visitedCategories);
|
|
76
|
+
visited.add(category);
|
|
77
|
+
return { visitedCategories: visited };
|
|
78
|
+
}),
|
|
79
|
+
goBack: () => set((state) => {
|
|
80
|
+
const history = [...state.history];
|
|
81
|
+
const previousStep = history.pop();
|
|
82
|
+
return {
|
|
83
|
+
step: previousStep || "approach",
|
|
84
|
+
history
|
|
85
|
+
};
|
|
86
|
+
}),
|
|
87
|
+
reset: (options) => set(createInitialState(options))
|
|
88
|
+
}));
|
|
89
|
+
|
|
90
|
+
export {
|
|
91
|
+
useWizardStore
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=chunk-6OY6ZYQF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-v2/stores/wizard-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n// Note: ResolvedStack is from skills-matrix.yaml's suggested_stacks (for wizard skill selection)\n// This is different from Stack in types-stacks.ts (for agent groupings in config/stacks.yaml)\nimport type { ResolvedStack } from \"../types-matrix\";\nimport { DEFAULT_PRESELECTED_SKILLS } from \"../consts\";\n\nexport type WizardStep =\n | \"approach\"\n | \"stack\"\n | \"category\"\n | \"subcategory\"\n | \"confirm\";\n\nexport interface WizardState {\n // Current step\n step: WizardStep;\n\n // Selections\n selectedSkills: string[];\n selectedStack: ResolvedStack | null;\n\n // Modes\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n\n // Navigation\n history: WizardStep[];\n currentTopCategory: string | null;\n currentSubcategory: string | null;\n visitedCategories: Set<string>;\n\n // Last selected values (for initialValue in prompts)\n lastSelectedCategory: string | null;\n lastSelectedSubcategory: string | null;\n lastSelectedSkill: string | null;\n lastSelectedApproach: string | null;\n\n // Actions\n setStep: (step: WizardStep) => void;\n toggleSkill: (skillId: string) => void;\n selectStack: (stack: ResolvedStack | null) => void;\n toggleExpertMode: () => void;\n toggleInstallMode: () => void;\n setCategory: (category: string | null) => void;\n setSubcategory: (subcategory: string | null) => void;\n setLastSelectedCategory: (category: string | null) => void;\n setLastSelectedSubcategory: (subcategory: string | null) => void;\n setLastSelectedSkill: (skillId: string | null) => void;\n setLastSelectedApproach: (approach: string | null) => void;\n markCategoryVisited: (category: string) => void;\n goBack: () => void;\n reset: (options?: {\n initialSkills?: string[];\n hasLocalSkills?: boolean;\n }) => void;\n}\n\nconst createInitialState = (options?: {\n initialSkills?: string[];\n hasLocalSkills?: boolean;\n}) => {\n const hasInitialSkills =\n options?.initialSkills && options.initialSkills.length > 0;\n\n // Start with default preselected skills (methodology), then add any initial skills\n const baseSkills = [...DEFAULT_PRESELECTED_SKILLS];\n const initialSkills = options?.initialSkills ?? [];\n const combinedSkills = [...new Set([...baseSkills, ...initialSkills])];\n\n return {\n step: (hasInitialSkills ? \"category\" : \"approach\") as WizardStep,\n selectedSkills: combinedSkills,\n selectedStack: null,\n expertMode: options?.hasLocalSkills ?? false,\n installMode: \"local\" as \"plugin\" | \"local\",\n history: [] as WizardStep[],\n currentTopCategory: null,\n currentSubcategory: null,\n visitedCategories: new Set<string>(),\n lastSelectedCategory: null,\n lastSelectedSubcategory: null,\n lastSelectedSkill: null,\n lastSelectedApproach: null,\n };\n};\n\nexport const useWizardStore = create<WizardState>((set, get) => ({\n ...createInitialState(),\n\n setStep: (step) =>\n set((state) => ({\n step,\n history: [...state.history, state.step],\n })),\n\n toggleSkill: (skillId) =>\n set((state) => {\n const isSelected = state.selectedSkills.includes(skillId);\n return {\n selectedSkills: isSelected\n ? state.selectedSkills.filter((id) => id !== skillId)\n : [...state.selectedSkills, skillId],\n };\n }),\n\n selectStack: (stack) =>\n set({\n selectedStack: stack,\n // Include preselected skills (methodology) plus stack skills\n selectedSkills: stack\n ? [...new Set([...DEFAULT_PRESELECTED_SKILLS, ...stack.allSkillIds])]\n : [...DEFAULT_PRESELECTED_SKILLS],\n }),\n\n toggleExpertMode: () =>\n set((state) => ({\n expertMode: !state.expertMode,\n })),\n\n toggleInstallMode: () =>\n set((state) => ({\n installMode: state.installMode === \"plugin\" ? \"local\" : \"plugin\",\n })),\n\n setCategory: (category) =>\n set({\n currentTopCategory: category,\n }),\n\n setSubcategory: (subcategory) =>\n set({\n currentSubcategory: subcategory,\n }),\n\n setLastSelectedCategory: (category) =>\n set({\n lastSelectedCategory: category,\n }),\n\n setLastSelectedSubcategory: (subcategory) =>\n set({\n lastSelectedSubcategory: subcategory,\n }),\n\n setLastSelectedSkill: (skillId) =>\n set({\n lastSelectedSkill: skillId,\n }),\n\n setLastSelectedApproach: (approach) =>\n set({\n lastSelectedApproach: approach,\n }),\n\n markCategoryVisited: (category) =>\n set((state) => {\n const visited = new Set(state.visitedCategories);\n visited.add(category);\n return { visitedCategories: visited };\n }),\n\n goBack: () =>\n set((state) => {\n const history = [...state.history];\n const previousStep = history.pop();\n return {\n step: previousStep || \"approach\",\n history,\n };\n }),\n\n reset: (options) => set(createInitialState(options)),\n}));\n"],"mappings":"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","names":[]}
|