davenov-cc 1.0.6 โ 1.0.8
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/README.md +5 -2
- package/bin/cli.js +36 -37
- package/commands/davenov:cc:update.md +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,6 @@ Slash commands that can be invoked with `/<command-name>`:
|
|
|
10
10
|
|
|
11
11
|
- **davenov:cc:interview** - Interview mode for expanding specifications
|
|
12
12
|
- **davenov:cc:rule** - Create or modify Claude Code rules
|
|
13
|
-
- **davenov:cc:update** - Update to latest version and sync to ~/.claude/
|
|
14
13
|
|
|
15
14
|
### Skills
|
|
16
15
|
|
|
@@ -33,12 +32,16 @@ That's it! The installer will copy all commands and skills to `~/.claude/`.
|
|
|
33
32
|
|
|
34
33
|
## Updating
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
### `/davenov:cc:update`
|
|
36
|
+
|
|
37
|
+
The easiest way โ just run this slash command from any Claude Code session:
|
|
37
38
|
|
|
38
39
|
```
|
|
39
40
|
/davenov:cc:update
|
|
40
41
|
```
|
|
41
42
|
|
|
43
|
+
### Manual update
|
|
44
|
+
|
|
42
45
|
Or run the npx command directly:
|
|
43
46
|
|
|
44
47
|
```bash
|
package/bin/cli.js
CHANGED
|
@@ -86,44 +86,48 @@ function removeRecursive(target) {
|
|
|
86
86
|
return true;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
console.log(`Target: ${CLAUDE_DIR}\n`);
|
|
92
|
-
|
|
93
|
-
// Check what's installed
|
|
94
|
-
const installed = [];
|
|
89
|
+
function getItemsToOverwrite() {
|
|
90
|
+
const toOverwrite = [];
|
|
95
91
|
for (const [dir, items] of Object.entries(INSTALLED_ITEMS)) {
|
|
96
92
|
for (const item of items) {
|
|
97
93
|
const fullPath = path.join(CLAUDE_DIR, dir, item);
|
|
98
94
|
if (fs.existsSync(fullPath)) {
|
|
99
|
-
|
|
95
|
+
toOverwrite.push({ dir, item, fullPath });
|
|
100
96
|
}
|
|
101
97
|
}
|
|
102
98
|
}
|
|
99
|
+
return toOverwrite;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async function uninstall(rl) {
|
|
103
|
+
console.log("\n๐๏ธ Davenov CC Collection โ Uninstaller\n");
|
|
104
|
+
|
|
105
|
+
// Check what's installed
|
|
106
|
+
const installed = getItemsToOverwrite();
|
|
103
107
|
|
|
104
108
|
if (installed.length === 0) {
|
|
105
|
-
console.log("
|
|
109
|
+
console.log("Nothing from Davenov CC found. Already clean! ๐งน\n");
|
|
106
110
|
return;
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
console.log("Found installed
|
|
113
|
+
console.log("Found these installed:");
|
|
110
114
|
for (const { dir, item } of installed) {
|
|
111
|
-
console.log(`
|
|
115
|
+
console.log(` ${dir}/${item}`);
|
|
112
116
|
}
|
|
113
117
|
console.log();
|
|
114
118
|
|
|
115
119
|
if (!AUTO_OVERRIDE) {
|
|
116
120
|
const answer = await prompt(
|
|
117
121
|
rl,
|
|
118
|
-
"
|
|
122
|
+
"Remove all of these? (y/N): "
|
|
119
123
|
);
|
|
120
124
|
|
|
121
125
|
if (answer.toLowerCase() !== "y") {
|
|
122
|
-
console.log("\
|
|
126
|
+
console.log("\nAll good, keeping everything in place. ๐\n");
|
|
123
127
|
return;
|
|
124
128
|
}
|
|
125
129
|
} else {
|
|
126
|
-
console.log("Auto-override enabled,
|
|
130
|
+
console.log("Auto-override enabled, cleaning up...");
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
console.log("\nRemoving...\n");
|
|
@@ -131,18 +135,17 @@ async function uninstall(rl) {
|
|
|
131
135
|
let removed = 0;
|
|
132
136
|
for (const { dir, item, fullPath } of installed) {
|
|
133
137
|
if (removeRecursive(fullPath)) {
|
|
134
|
-
console.log(`
|
|
138
|
+
console.log(` โ ${dir}/${item}`);
|
|
135
139
|
removed++;
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
|
|
139
|
-
console.log(`\nโ
|
|
143
|
+
console.log(`\nโ
Done! Removed ${removed} item(s).`);
|
|
144
|
+
console.log(" Come back anytime! ๐\n");
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
async function install(rl) {
|
|
143
|
-
console.log("\n
|
|
144
|
-
console.log(`Source: ${SOURCE_DIR}`);
|
|
145
|
-
console.log(`Target: ${CLAUDE_DIR}\n`);
|
|
148
|
+
console.log("\nโจ Davenov CC Collection\n");
|
|
146
149
|
|
|
147
150
|
// Check what we have to install
|
|
148
151
|
const available = CUSTOMIZATION_DIRS.filter((dir) =>
|
|
@@ -150,40 +153,38 @@ async function install(rl) {
|
|
|
150
153
|
);
|
|
151
154
|
|
|
152
155
|
if (available.length === 0) {
|
|
153
|
-
console.log("
|
|
156
|
+
console.log("Hmm, nothing to install here. That's weird.");
|
|
154
157
|
process.exit(0);
|
|
155
158
|
}
|
|
156
159
|
|
|
157
|
-
console.log("
|
|
160
|
+
console.log("๐ฆ What's in the box:");
|
|
158
161
|
for (const dir of available) {
|
|
159
162
|
const srcPath = path.join(SOURCE_DIR, dir);
|
|
160
163
|
const fileCount = countFiles(srcPath);
|
|
161
|
-
console.log(`
|
|
164
|
+
console.log(` ${dir}/ โ ${fileCount} files`);
|
|
162
165
|
}
|
|
163
166
|
console.log();
|
|
164
167
|
|
|
165
|
-
// Check for
|
|
166
|
-
const
|
|
167
|
-
fs.existsSync(path.join(CLAUDE_DIR, dir))
|
|
168
|
-
);
|
|
168
|
+
// Check for actual file conflicts (not just directory existence)
|
|
169
|
+
const itemsToOverwrite = getItemsToOverwrite();
|
|
169
170
|
|
|
170
|
-
if (
|
|
171
|
-
console.log("โ ๏ธ
|
|
172
|
-
for (const dir of
|
|
173
|
-
console.log(`
|
|
171
|
+
if (itemsToOverwrite.length > 0) {
|
|
172
|
+
console.log("โ ๏ธ Heads up! These will be overwritten:");
|
|
173
|
+
for (const { dir, item } of itemsToOverwrite) {
|
|
174
|
+
console.log(` ${dir}/${item}`);
|
|
174
175
|
}
|
|
175
176
|
console.log();
|
|
176
177
|
|
|
177
178
|
if (AUTO_OVERRIDE) {
|
|
178
|
-
console.log("Auto-override enabled,
|
|
179
|
+
console.log("Auto-override enabled, let's go...");
|
|
179
180
|
} else {
|
|
180
181
|
const answer = await prompt(
|
|
181
182
|
rl,
|
|
182
|
-
"
|
|
183
|
+
"Cool with that? (y/N): "
|
|
183
184
|
);
|
|
184
185
|
|
|
185
186
|
if (answer.toLowerCase() !== "y") {
|
|
186
|
-
console.log("\
|
|
187
|
+
console.log("\nNo worries, nothing changed. Catch you later! ๐");
|
|
187
188
|
rl.close();
|
|
188
189
|
process.exit(0);
|
|
189
190
|
}
|
|
@@ -193,22 +194,20 @@ async function install(rl) {
|
|
|
193
194
|
// Ensure .claude directory exists
|
|
194
195
|
if (!fs.existsSync(CLAUDE_DIR)) {
|
|
195
196
|
fs.mkdirSync(CLAUDE_DIR, { recursive: true });
|
|
196
|
-
console.log(`Created ${CLAUDE_DIR}`);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
// Install each directory
|
|
200
|
-
console.log("
|
|
200
|
+
console.log("Installing the good stuff...\n");
|
|
201
201
|
|
|
202
202
|
for (const dir of available) {
|
|
203
203
|
const srcPath = path.join(SOURCE_DIR, dir);
|
|
204
204
|
const destPath = path.join(CLAUDE_DIR, dir);
|
|
205
205
|
|
|
206
|
-
console.log(`
|
|
206
|
+
console.log(` โ ${dir}/`);
|
|
207
207
|
copyRecursive(srcPath, destPath);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
console.log("\n
|
|
211
|
-
console.log("Your customizations are now available in Claude Code.");
|
|
210
|
+
console.log("\n๐ You're all set! Go build something!\n");
|
|
212
211
|
}
|
|
213
212
|
|
|
214
213
|
async function main() {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Update
|
|
2
|
+
description: Update Davenov CC (skills & slash commands collection) to the latest version
|
|
3
3
|
allowed-tools:
|
|
4
4
|
- Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Update
|
|
7
|
+
# Update Davenov CC Collection
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
This command updates the **davenov-cc** npm package โ a collection of Claude Code skills and slash commands โ to the latest version and syncs them to your `~/.claude/` folder.
|
|
10
10
|
|
|
11
11
|
## Instructions
|
|
12
12
|
|