gsd-cc 1.4.1 → 1.5.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/assets/flow-2.jpg +0 -0
- package/assets/flow.jpg +0 -0
- package/assets/hero.jpg +0 -0
- package/bin/install.js +60 -81
- package/package.json +1 -1
- /package/{skills/gsd/apply → checklists}/.gitkeep +0 -0
- /package/{skills/gsd/checklists → checklists}/planning-ready.md +0 -0
- /package/{skills/gsd/checklists → checklists}/unify-complete.md +0 -0
- /package/{skills/gsd/auto → commands}/.gitkeep +0 -0
- /package/{skills/gsd/prompts → commands}/apply-instructions.txt +0 -0
- /package/{skills/gsd/prompts → commands}/plan-instructions.txt +0 -0
- /package/{skills/gsd/prompts → commands}/reassess-instructions.txt +0 -0
- /package/{skills/gsd/prompts → commands}/unify-instructions.txt +0 -0
- /package/skills/{gsd/checklists → apply}/.gitkeep +0 -0
- /package/skills/{gsd/apply → apply}/SKILL.md +0 -0
- /package/skills/{gsd/discuss → auto}/.gitkeep +0 -0
- /package/skills/{gsd/auto → auto}/SKILL.md +0 -0
- /package/skills/{gsd/auto → auto}/auto-loop.sh +0 -0
- /package/skills/{gsd/config → config}/SKILL.md +0 -0
- /package/skills/{gsd/plan → discuss}/.gitkeep +0 -0
- /package/skills/{gsd/discuss → discuss}/SKILL.md +0 -0
- /package/skills/{gsd → gsd-cc}/SKILL.md +0 -0
- /package/skills/{gsd/help → help}/SKILL.md +0 -0
- /package/skills/{gsd/ideate → ideate}/SKILL.md +0 -0
- /package/skills/{gsd/ingest → ingest}/SKILL.md +0 -0
- /package/skills/{gsd/prompts → plan}/.gitkeep +0 -0
- /package/skills/{gsd/plan → plan}/SKILL.md +0 -0
- /package/skills/{gsd/profile → profile}/SKILL.md +0 -0
- /package/skills/{gsd/seed → seed}/SKILL.md +0 -0
- /package/skills/{gsd/seed → seed}/types/application/.gitkeep +0 -0
- /package/skills/{gsd/seed → seed}/types/application/config.md +0 -0
- /package/skills/{gsd/seed → seed}/types/application/guide.md +0 -0
- /package/skills/{gsd/seed → seed}/types/application/loadout.md +0 -0
- /package/skills/{gsd/seed → seed}/types/campaign/.gitkeep +0 -0
- /package/skills/{gsd/seed → seed}/types/campaign/config.md +0 -0
- /package/skills/{gsd/seed → seed}/types/campaign/guide.md +0 -0
- /package/skills/{gsd/seed → seed}/types/campaign/loadout.md +0 -0
- /package/skills/{gsd/seed → seed}/types/client/.gitkeep +0 -0
- /package/skills/{gsd/seed → seed}/types/client/config.md +0 -0
- /package/skills/{gsd/seed → seed}/types/client/guide.md +0 -0
- /package/skills/{gsd/seed → seed}/types/client/loadout.md +0 -0
- /package/skills/{gsd/seed → seed}/types/utility/.gitkeep +0 -0
- /package/skills/{gsd/seed → seed}/types/utility/config.md +0 -0
- /package/skills/{gsd/seed → seed}/types/utility/guide.md +0 -0
- /package/skills/{gsd/seed → seed}/types/utility/loadout.md +0 -0
- /package/skills/{gsd/seed → seed}/types/workflow/.gitkeep +0 -0
- /package/skills/{gsd/seed → seed}/types/workflow/config.md +0 -0
- /package/skills/{gsd/seed → seed}/types/workflow/guide.md +0 -0
- /package/skills/{gsd/seed → seed}/types/workflow/loadout.md +0 -0
- /package/skills/{gsd/stack → stack}/SKILL.md +0 -0
- /package/skills/{gsd/status → status}/.gitkeep +0 -0
- /package/skills/{gsd/status → status}/SKILL.md +0 -0
- /package/skills/{gsd/tutorial → tutorial}/SKILL.md +0 -0
- /package/skills/{gsd/templates → unify}/.gitkeep +0 -0
- /package/skills/{gsd/unify → unify}/SKILL.md +0 -0
- /package/skills/{gsd/update → update}/SKILL.md +0 -0
- /package/skills/{gsd/vision → vision}/SKILL.md +0 -0
- /package/{skills/gsd/unify → templates}/.gitkeep +0 -0
- /package/{skills/gsd/templates → templates}/PLAN.xml +0 -0
- /package/{skills/gsd/templates → templates}/PLANNING.md +0 -0
- /package/{skills/gsd/templates → templates}/STATE.md +0 -0
- /package/{skills/gsd/templates → templates}/UNIFY.md +0 -0
|
Binary file
|
package/assets/flow.jpg
ADDED
|
Binary file
|
package/assets/hero.jpg
ADDED
|
Binary file
|
package/bin/install.js
CHANGED
|
@@ -26,11 +26,8 @@ ${cyan} ██████╗ ███████╗██████╗
|
|
|
26
26
|
Get Shit Done on Claude Code ${dim}v${pkg.version}${reset}
|
|
27
27
|
`;
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
// Shared directories installed directly into .claude/
|
|
33
|
-
const SHARED_DIRS = ['checklists', 'prompts', 'templates'];
|
|
29
|
+
// Directories inside gsd-cc/ that map 1:1 into .claude/
|
|
30
|
+
const CLAUDE_DIRS = ['skills', 'hooks', 'checklists', 'commands', 'templates'];
|
|
34
31
|
|
|
35
32
|
// Parse args
|
|
36
33
|
const args = process.argv.slice(2);
|
|
@@ -94,86 +91,61 @@ function removeDir(dir) {
|
|
|
94
91
|
}
|
|
95
92
|
|
|
96
93
|
/**
|
|
97
|
-
* Resolve
|
|
94
|
+
* Resolve .claude base directory
|
|
98
95
|
*/
|
|
99
|
-
function
|
|
96
|
+
function getClaudeBase(isGlobal) {
|
|
100
97
|
if (isGlobal) {
|
|
101
|
-
return path.join(os.homedir(), '.claude'
|
|
98
|
+
return path.join(os.homedir(), '.claude');
|
|
102
99
|
}
|
|
103
|
-
return path.join(process.cwd(), '.claude'
|
|
100
|
+
return path.join(process.cwd(), '.claude');
|
|
104
101
|
}
|
|
105
102
|
|
|
106
103
|
/**
|
|
107
|
-
* Install
|
|
104
|
+
* Install everything into .claude/
|
|
105
|
+
* Source structure mirrors target structure 1:1.
|
|
108
106
|
*/
|
|
109
107
|
function install(isGlobal) {
|
|
110
|
-
const
|
|
111
|
-
const
|
|
108
|
+
const srcBase = path.join(__dirname, '..');
|
|
109
|
+
const claudeBase = isGlobal
|
|
110
|
+
? path.join(os.homedir(), '.claude')
|
|
111
|
+
: path.join(process.cwd(), '.claude');
|
|
112
112
|
const label = isGlobal
|
|
113
|
-
?
|
|
114
|
-
:
|
|
115
|
-
|
|
116
|
-
if (!fs.existsSync(skillsSrc)) {
|
|
117
|
-
console.error(` ${red}Error:${reset} Skills source not found at ${skillsSrc}`);
|
|
118
|
-
process.exit(1);
|
|
119
|
-
}
|
|
113
|
+
? claudeBase.replace(os.homedir(), '~')
|
|
114
|
+
: claudeBase.replace(process.cwd(), '.');
|
|
120
115
|
|
|
121
116
|
console.log(` Installing to ${cyan}${label}${reset}\n`);
|
|
122
117
|
|
|
123
118
|
let fileCount = 0;
|
|
124
119
|
|
|
125
|
-
//
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
fs.copyFileSync(path.join(skillsSrc, 'SKILL.md'), path.join(routerDest, 'SKILL.md'));
|
|
129
|
-
fileCount++;
|
|
130
|
-
|
|
131
|
-
// 2. Install each sub-skill as its own top-level directory
|
|
132
|
-
for (const skill of SUB_SKILLS) {
|
|
133
|
-
const srcDir = path.join(skillsSrc, skill);
|
|
134
|
-
const destDir = path.join(skillsBase, `gsd-cc-${skill}`);
|
|
135
|
-
|
|
136
|
-
if (fs.existsSync(srcDir)) {
|
|
137
|
-
copyDir(srcDir, destDir);
|
|
138
|
-
fileCount += countFiles(destDir);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// 3. Install shared resources (templates, checklists, prompts) into .claude/
|
|
143
|
-
const claudeBase = isGlobal
|
|
144
|
-
? path.join(os.homedir(), '.claude')
|
|
145
|
-
: path.join(process.cwd(), '.claude');
|
|
146
|
-
for (const dir of SHARED_DIRS) {
|
|
147
|
-
const srcDir = path.join(skillsSrc, dir);
|
|
120
|
+
// Copy each directory 1:1 into .claude/
|
|
121
|
+
for (const dir of CLAUDE_DIRS) {
|
|
122
|
+
const srcDir = path.join(srcBase, dir);
|
|
148
123
|
if (fs.existsSync(srcDir)) {
|
|
149
124
|
copyDir(srcDir, path.join(claudeBase, dir));
|
|
150
125
|
fileCount += countFiles(path.join(claudeBase, dir));
|
|
151
126
|
}
|
|
152
127
|
}
|
|
153
128
|
|
|
154
|
-
//
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
fs.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (fs.existsSync(hooksSrc)) {
|
|
166
|
-
copyDir(hooksSrc, hooksBase);
|
|
167
|
-
// Make hooks executable
|
|
168
|
-
const hookFiles = fs.readdirSync(hooksBase);
|
|
169
|
-
for (const f of hookFiles) {
|
|
170
|
-
fs.chmodSync(path.join(hooksBase, f), 0o755);
|
|
129
|
+
// Make shell scripts executable
|
|
130
|
+
const makeExecutable = (dir) => {
|
|
131
|
+
if (!fs.existsSync(dir)) return;
|
|
132
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
const fullPath = path.join(dir, entry.name);
|
|
135
|
+
if (entry.isDirectory()) {
|
|
136
|
+
makeExecutable(fullPath);
|
|
137
|
+
} else if (entry.name.endsWith('.sh')) {
|
|
138
|
+
fs.chmodSync(fullPath, 0o755);
|
|
139
|
+
}
|
|
171
140
|
}
|
|
172
|
-
|
|
173
|
-
|
|
141
|
+
};
|
|
142
|
+
makeExecutable(claudeBase);
|
|
174
143
|
|
|
175
|
-
//
|
|
176
|
-
|
|
144
|
+
// Configure hooks in settings.json
|
|
145
|
+
const hooksDir = path.join(claudeBase, 'hooks');
|
|
146
|
+
if (fs.existsSync(hooksDir)) {
|
|
147
|
+
installHooks(isGlobal, hooksDir);
|
|
148
|
+
}
|
|
177
149
|
|
|
178
150
|
console.log(` ${green}✓${reset} Installed ${fileCount} files to ${label}`);
|
|
179
151
|
}
|
|
@@ -308,34 +280,41 @@ function countFiles(dir) {
|
|
|
308
280
|
}
|
|
309
281
|
|
|
310
282
|
/**
|
|
311
|
-
* Uninstall
|
|
283
|
+
* Uninstall GSD-CC
|
|
312
284
|
*/
|
|
313
285
|
function uninstall() {
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
|
|
286
|
+
const claudeBases = [
|
|
287
|
+
path.join(os.homedir(), '.claude'),
|
|
288
|
+
path.join(process.cwd(), '.claude')
|
|
289
|
+
];
|
|
317
290
|
|
|
318
291
|
let removed = false;
|
|
319
292
|
|
|
320
|
-
for (const
|
|
321
|
-
const label =
|
|
322
|
-
?
|
|
323
|
-
:
|
|
293
|
+
for (const claudeBase of claudeBases) {
|
|
294
|
+
const label = claudeBase.includes(os.homedir())
|
|
295
|
+
? claudeBase.replace(os.homedir(), '~')
|
|
296
|
+
: claudeBase.replace(process.cwd(), '.');
|
|
324
297
|
|
|
325
298
|
let removedFromLocation = false;
|
|
326
|
-
|
|
327
|
-
|
|
299
|
+
|
|
300
|
+
// Remove all CLAUDE_DIRS
|
|
301
|
+
for (const dir of [...CLAUDE_DIRS, 'prompts']) { // 'prompts' for legacy cleanup
|
|
302
|
+
const fullPath = path.join(claudeBase, dir);
|
|
328
303
|
if (removeDir(fullPath)) {
|
|
329
304
|
removedFromLocation = true;
|
|
330
305
|
}
|
|
331
306
|
}
|
|
332
307
|
|
|
333
|
-
//
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
|
|
308
|
+
// Also clean up old skill names (legacy: gsd-cc-shared, gsd)
|
|
309
|
+
const skillsDir = path.join(claudeBase, 'skills');
|
|
310
|
+
if (fs.existsSync(skillsDir)) {
|
|
311
|
+
const entries = fs.readdirSync(skillsDir);
|
|
312
|
+
for (const entry of entries) {
|
|
313
|
+
if (entry.startsWith('gsd-cc') || entry === 'gsd') {
|
|
314
|
+
if (removeDir(path.join(skillsDir, entry))) {
|
|
315
|
+
removedFromLocation = true;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
339
318
|
}
|
|
340
319
|
}
|
|
341
320
|
|
|
@@ -384,12 +363,12 @@ function promptLocation() {
|
|
|
384
363
|
output: process.stdout,
|
|
385
364
|
});
|
|
386
365
|
|
|
387
|
-
const globalPath =
|
|
366
|
+
const globalPath = getClaudeBase(true).replace(os.homedir(), '~');
|
|
388
367
|
|
|
389
368
|
console.log(` ${yellow}Where would you like to install?${reset}
|
|
390
369
|
|
|
391
370
|
${cyan}1${reset}) Global ${dim}(${globalPath})${reset} — available in all projects
|
|
392
|
-
${cyan}2${reset}) Local ${dim}(./.claude/
|
|
371
|
+
${cyan}2${reset}) Local ${dim}(./.claude/)${reset} — this project only
|
|
393
372
|
`);
|
|
394
373
|
|
|
395
374
|
rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-cc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Get Shit Done on Claude Code — structured AI development with your Max plan",
|
|
5
5
|
"author": "Philipp Briese (https://github.com/0ui-labs)",
|
|
6
6
|
"homepage": "https://github.com/0ui-labs/GSD-CC#readme",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|