claude-cli-advanced-starter-pack 1.0.13 → 1.0.14
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/package.json +1 -1
- package/src/commands/init.js +78 -5
- package/src/data/releases.json +30 -0
package/package.json
CHANGED
package/src/commands/init.js
CHANGED
|
@@ -42,7 +42,7 @@ const OPTIONAL_FEATURES = [
|
|
|
42
42
|
label: 'Token Budget Management',
|
|
43
43
|
description: 'Monitor and manage Claude API token usage with automatic compaction warnings, archive suggestions, and respawn thresholds. Includes hooks that track usage per session.',
|
|
44
44
|
commands: ['context-audit'],
|
|
45
|
-
hooks: ['
|
|
45
|
+
hooks: ['context-guardian'], // Only include hooks with templates
|
|
46
46
|
default: false,
|
|
47
47
|
requiresPostConfig: false,
|
|
48
48
|
},
|
|
@@ -51,7 +51,7 @@ const OPTIONAL_FEATURES = [
|
|
|
51
51
|
label: 'Happy Engineering Integration',
|
|
52
52
|
description: 'Integration with Happy Coder mobile app for remote session control, checkpoint management, and mobile-optimized responses. Requires Happy Coder app installed separately.',
|
|
53
53
|
commands: ['happy-start'],
|
|
54
|
-
hooks: ['happy-checkpoint-manager',
|
|
54
|
+
hooks: ['happy-checkpoint-manager'], // Only include hooks with templates
|
|
55
55
|
default: false,
|
|
56
56
|
requiresPostConfig: true,
|
|
57
57
|
},
|
|
@@ -60,7 +60,7 @@ const OPTIONAL_FEATURES = [
|
|
|
60
60
|
label: 'GitHub Project Board Integration',
|
|
61
61
|
description: 'Connect Claude to your GitHub Project Board for automated issue creation, progress tracking, and PR merge automation. Requires gh CLI authentication.',
|
|
62
62
|
commands: ['github-update', 'github-task-start'],
|
|
63
|
-
hooks: ['github-progress-hook',
|
|
63
|
+
hooks: ['github-progress-hook'], // Only include hooks with templates
|
|
64
64
|
default: true,
|
|
65
65
|
requiresPostConfig: true,
|
|
66
66
|
},
|
|
@@ -1818,6 +1818,25 @@ export async function runInit(options = {}) {
|
|
|
1818
1818
|
const enabledFeatures = OPTIONAL_FEATURES.filter((f) => selectedFeatures.includes(f.name));
|
|
1819
1819
|
const featuresRequiringConfig = enabledFeatures.filter((f) => f.requiresPostConfig);
|
|
1820
1820
|
|
|
1821
|
+
// Collect feature-specific commands and hooks to deploy
|
|
1822
|
+
const featureCommands = [];
|
|
1823
|
+
const featureHooks = [];
|
|
1824
|
+
for (const feature of enabledFeatures) {
|
|
1825
|
+
featureCommands.push(...feature.commands);
|
|
1826
|
+
featureHooks.push(...feature.hooks);
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
if (featureCommands.length > 0) {
|
|
1830
|
+
console.log('');
|
|
1831
|
+
console.log(chalk.green(` ✓ Selected features will add ${featureCommands.length} command(s):`));
|
|
1832
|
+
console.log(chalk.dim(` ${featureCommands.map(c => '/' + c).join(', ')}`));
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
if (featureHooks.length > 0) {
|
|
1836
|
+
console.log(chalk.green(` ✓ Selected features will add ${featureHooks.length} hook(s):`));
|
|
1837
|
+
console.log(chalk.dim(` ${featureHooks.join(', ')}`));
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1821
1840
|
if (featuresRequiringConfig.length > 0) {
|
|
1822
1841
|
console.log('');
|
|
1823
1842
|
console.log(chalk.yellow(' ℹ The following features require configuration after installation:'));
|
|
@@ -1878,15 +1897,21 @@ export async function runInit(options = {}) {
|
|
|
1878
1897
|
},
|
|
1879
1898
|
]);
|
|
1880
1899
|
|
|
1881
|
-
// Always include required commands
|
|
1900
|
+
// Always include required commands AND feature-specific commands
|
|
1882
1901
|
const requiredCommands = AVAILABLE_COMMANDS.filter(c => c.required).map(c => c.name);
|
|
1883
|
-
const finalCommands = [...new Set([...requiredCommands, ...selectedCommands])];
|
|
1902
|
+
const finalCommands = [...new Set([...requiredCommands, ...selectedCommands, ...featureCommands])];
|
|
1884
1903
|
|
|
1885
1904
|
if (finalCommands.length === 0) {
|
|
1886
1905
|
showWarning('No commands selected. Nothing to install.');
|
|
1887
1906
|
return;
|
|
1888
1907
|
}
|
|
1889
1908
|
|
|
1909
|
+
// Show what feature commands were auto-added
|
|
1910
|
+
const autoAddedCommands = featureCommands.filter(c => !selectedCommands.includes(c) && !requiredCommands.includes(c));
|
|
1911
|
+
if (autoAddedCommands.length > 0) {
|
|
1912
|
+
console.log(chalk.cyan(` ℹ Auto-including ${autoAddedCommands.length} feature command(s): ${autoAddedCommands.map(c => '/' + c).join(', ')}`));
|
|
1913
|
+
}
|
|
1914
|
+
|
|
1890
1915
|
console.log('');
|
|
1891
1916
|
|
|
1892
1917
|
// Step 6: Check for existing commands that would be overwritten
|
|
@@ -2181,6 +2206,45 @@ export async function runInit(options = {}) {
|
|
|
2181
2206
|
console.log(chalk.cyan(`\n 📁 Backed up ${backedUpFiles.length} file(s) to .claude/backups/`));
|
|
2182
2207
|
}
|
|
2183
2208
|
|
|
2209
|
+
// Step 6b: Deploy feature-specific hooks
|
|
2210
|
+
const deployedHooks = [];
|
|
2211
|
+
const failedHooks = [];
|
|
2212
|
+
|
|
2213
|
+
if (featureHooks.length > 0) {
|
|
2214
|
+
console.log(chalk.bold('\nStep 6b: Deploying feature hooks\n'));
|
|
2215
|
+
|
|
2216
|
+
for (const hookName of featureHooks) {
|
|
2217
|
+
try {
|
|
2218
|
+
const hookPath = join(hooksDir, `${hookName}.js`);
|
|
2219
|
+
|
|
2220
|
+
// Skip if already exists
|
|
2221
|
+
if (existsSync(hookPath)) {
|
|
2222
|
+
console.log(chalk.blue(` ○ hooks/${hookName}.js exists (preserved)`));
|
|
2223
|
+
continue;
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
// Try to load from templates/hooks/ folder
|
|
2227
|
+
const templatePath = join(__dirname, '..', '..', 'templates', 'hooks', `${hookName}.template.js`);
|
|
2228
|
+
if (existsSync(templatePath)) {
|
|
2229
|
+
const hookContent = readFileSync(templatePath, 'utf8');
|
|
2230
|
+
writeFileSync(hookPath, hookContent, 'utf8');
|
|
2231
|
+
deployedHooks.push(hookName);
|
|
2232
|
+
console.log(chalk.green(` ✓ Created hooks/${hookName}.js`));
|
|
2233
|
+
} else {
|
|
2234
|
+
failedHooks.push({ name: hookName, error: 'No template found' });
|
|
2235
|
+
console.log(chalk.yellow(` ⚠ Skipped hooks/${hookName}.js (no template)`));
|
|
2236
|
+
}
|
|
2237
|
+
} catch (error) {
|
|
2238
|
+
failedHooks.push({ name: hookName, error: error.message });
|
|
2239
|
+
console.log(chalk.red(` ✗ Failed: hooks/${hookName}.js - ${error.message}`));
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
if (deployedHooks.length > 0) {
|
|
2244
|
+
console.log(chalk.green(`\n ✓ Deployed ${deployedHooks.length} feature hook(s)`));
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
2247
|
+
|
|
2184
2248
|
// Step 7: Generate INDEX.md
|
|
2185
2249
|
const indexPath = join(commandsDir, 'INDEX.md');
|
|
2186
2250
|
const indexContent = generateIndexFile(installed, projectName);
|
|
@@ -2308,6 +2372,15 @@ export async function runInit(options = {}) {
|
|
|
2308
2372
|
},
|
|
2309
2373
|
// Track which features need post-install configuration
|
|
2310
2374
|
_pendingConfiguration: featuresRequiringConfig.map((f) => f.name),
|
|
2375
|
+
// Track what was deployed for verification
|
|
2376
|
+
_deployment: {
|
|
2377
|
+
commands: installed,
|
|
2378
|
+
featureCommands: featureCommands.filter(c => installed.includes(c)),
|
|
2379
|
+
hooks: deployedHooks,
|
|
2380
|
+
featureHooks: featureHooks,
|
|
2381
|
+
enabledFeatures: selectedFeatures,
|
|
2382
|
+
timestamp: new Date().toISOString(),
|
|
2383
|
+
},
|
|
2311
2384
|
};
|
|
2312
2385
|
|
|
2313
2386
|
if (!existsSync(techStackPath)) {
|
package/src/data/releases.json
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"releases": [
|
|
3
|
+
{
|
|
4
|
+
"version": "1.0.14",
|
|
5
|
+
"date": "2026-01-30",
|
|
6
|
+
"summary": "Fix: Complete feature deployment - hooks, commands, and auto-selection now work correctly",
|
|
7
|
+
"highlights": [
|
|
8
|
+
"Feature commands are now auto-included when a feature is selected",
|
|
9
|
+
"Feature hooks are now properly deployed during init",
|
|
10
|
+
"OPTIONAL_FEATURES cleaned up to only reference existing templates",
|
|
11
|
+
"tech-stack.json now tracks deployed commands and hooks for verification",
|
|
12
|
+
"Step 6b added to show feature hook deployment progress"
|
|
13
|
+
],
|
|
14
|
+
"newFeatures": {
|
|
15
|
+
"commands": [],
|
|
16
|
+
"agents": [],
|
|
17
|
+
"skills": [],
|
|
18
|
+
"hooks": [],
|
|
19
|
+
"other": [
|
|
20
|
+
{
|
|
21
|
+
"name": "feature-auto-deployment",
|
|
22
|
+
"description": "When selecting a feature, its commands and hooks are automatically deployed"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "deployment-tracking",
|
|
26
|
+
"description": "tech-stack.json now includes _deployment section tracking what was installed"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"breaking": [],
|
|
31
|
+
"deprecated": []
|
|
32
|
+
},
|
|
3
33
|
{
|
|
4
34
|
"version": "1.0.13",
|
|
5
35
|
"date": "2026-01-30",
|