gsd-cc 1.4.1 → 1.5.1

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.
Files changed (59) hide show
  1. package/bin/install.js +60 -81
  2. package/package.json +1 -1
  3. /package/{skills/gsd/apply → checklists}/.gitkeep +0 -0
  4. /package/{skills/gsd/checklists → checklists}/planning-ready.md +0 -0
  5. /package/{skills/gsd/checklists → checklists}/unify-complete.md +0 -0
  6. /package/{skills/gsd/auto → commands}/.gitkeep +0 -0
  7. /package/{skills/gsd/prompts → commands}/apply-instructions.txt +0 -0
  8. /package/{skills/gsd/prompts → commands}/plan-instructions.txt +0 -0
  9. /package/{skills/gsd/prompts → commands}/reassess-instructions.txt +0 -0
  10. /package/{skills/gsd/prompts → commands}/unify-instructions.txt +0 -0
  11. /package/skills/{gsd/checklists → apply}/.gitkeep +0 -0
  12. /package/skills/{gsd/apply → apply}/SKILL.md +0 -0
  13. /package/skills/{gsd/discuss → auto}/.gitkeep +0 -0
  14. /package/skills/{gsd/auto → auto}/SKILL.md +0 -0
  15. /package/skills/{gsd/auto → auto}/auto-loop.sh +0 -0
  16. /package/skills/{gsd/config → config}/SKILL.md +0 -0
  17. /package/skills/{gsd/plan → discuss}/.gitkeep +0 -0
  18. /package/skills/{gsd/discuss → discuss}/SKILL.md +0 -0
  19. /package/skills/{gsd → gsd-cc}/SKILL.md +0 -0
  20. /package/skills/{gsd/help → help}/SKILL.md +0 -0
  21. /package/skills/{gsd/ideate → ideate}/SKILL.md +0 -0
  22. /package/skills/{gsd/ingest → ingest}/SKILL.md +0 -0
  23. /package/skills/{gsd/prompts → plan}/.gitkeep +0 -0
  24. /package/skills/{gsd/plan → plan}/SKILL.md +0 -0
  25. /package/skills/{gsd/profile → profile}/SKILL.md +0 -0
  26. /package/skills/{gsd/seed → seed}/SKILL.md +0 -0
  27. /package/skills/{gsd/seed → seed}/types/application/.gitkeep +0 -0
  28. /package/skills/{gsd/seed → seed}/types/application/config.md +0 -0
  29. /package/skills/{gsd/seed → seed}/types/application/guide.md +0 -0
  30. /package/skills/{gsd/seed → seed}/types/application/loadout.md +0 -0
  31. /package/skills/{gsd/seed → seed}/types/campaign/.gitkeep +0 -0
  32. /package/skills/{gsd/seed → seed}/types/campaign/config.md +0 -0
  33. /package/skills/{gsd/seed → seed}/types/campaign/guide.md +0 -0
  34. /package/skills/{gsd/seed → seed}/types/campaign/loadout.md +0 -0
  35. /package/skills/{gsd/seed → seed}/types/client/.gitkeep +0 -0
  36. /package/skills/{gsd/seed → seed}/types/client/config.md +0 -0
  37. /package/skills/{gsd/seed → seed}/types/client/guide.md +0 -0
  38. /package/skills/{gsd/seed → seed}/types/client/loadout.md +0 -0
  39. /package/skills/{gsd/seed → seed}/types/utility/.gitkeep +0 -0
  40. /package/skills/{gsd/seed → seed}/types/utility/config.md +0 -0
  41. /package/skills/{gsd/seed → seed}/types/utility/guide.md +0 -0
  42. /package/skills/{gsd/seed → seed}/types/utility/loadout.md +0 -0
  43. /package/skills/{gsd/seed → seed}/types/workflow/.gitkeep +0 -0
  44. /package/skills/{gsd/seed → seed}/types/workflow/config.md +0 -0
  45. /package/skills/{gsd/seed → seed}/types/workflow/guide.md +0 -0
  46. /package/skills/{gsd/seed → seed}/types/workflow/loadout.md +0 -0
  47. /package/skills/{gsd/stack → stack}/SKILL.md +0 -0
  48. /package/skills/{gsd/status → status}/.gitkeep +0 -0
  49. /package/skills/{gsd/status → status}/SKILL.md +0 -0
  50. /package/skills/{gsd/tutorial → tutorial}/SKILL.md +0 -0
  51. /package/skills/{gsd/templates → unify}/.gitkeep +0 -0
  52. /package/skills/{gsd/unify → unify}/SKILL.md +0 -0
  53. /package/skills/{gsd/update → update}/SKILL.md +0 -0
  54. /package/skills/{gsd/vision → vision}/SKILL.md +0 -0
  55. /package/{skills/gsd/unify → templates}/.gitkeep +0 -0
  56. /package/{skills/gsd/templates → templates}/PLAN.xml +0 -0
  57. /package/{skills/gsd/templates → templates}/PLANNING.md +0 -0
  58. /package/{skills/gsd/templates → templates}/STATE.md +0 -0
  59. /package/{skills/gsd/templates → templates}/UNIFY.md +0 -0
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
- // Sub-skills that get their own top-level directory under .claude/skills/
30
- const SUB_SKILLS = ['apply', 'auto', 'config', 'discuss', 'help', 'ideate', 'ingest', 'plan', 'profile', 'seed', 'stack', 'status', 'tutorial', 'unify', 'update', 'vision'];
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 skills base directory
94
+ * Resolve .claude base directory
98
95
  */
99
- function getSkillsBase(isGlobal) {
96
+ function getClaudeBase(isGlobal) {
100
97
  if (isGlobal) {
101
- return path.join(os.homedir(), '.claude', 'skills');
98
+ return path.join(os.homedir(), '.claude');
102
99
  }
103
- return path.join(process.cwd(), '.claude', 'skills');
100
+ return path.join(process.cwd(), '.claude');
104
101
  }
105
102
 
106
103
  /**
107
- * Install skills to target directory
104
+ * Install everything into .claude/
105
+ * Source structure mirrors target structure 1:1.
108
106
  */
109
107
  function install(isGlobal) {
110
- const skillsSrc = path.join(__dirname, '..', 'skills', 'gsd');
111
- const skillsBase = getSkillsBase(isGlobal);
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
- ? skillsBase.replace(os.homedir(), '~')
114
- : skillsBase.replace(process.cwd(), '.');
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
- // 1. Install main router: gsd-cc/SKILL.md
126
- const routerDest = path.join(skillsBase, 'gsd-cc');
127
- fs.mkdirSync(routerDest, { recursive: true });
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
- // 4. Make auto-loop.sh executable
155
- const autoLoop = path.join(skillsBase, 'gsd-cc-auto', 'auto-loop.sh');
156
- if (fs.existsSync(autoLoop)) {
157
- fs.chmodSync(autoLoop, 0o755);
158
- }
159
-
160
- // 5. Install hooks
161
- const hooksSrc = path.join(__dirname, '..', 'hooks');
162
- const hooksBase = isGlobal
163
- ? path.join(os.homedir(), '.claude', 'hooks')
164
- : path.join(process.cwd(), '.claude', 'hooks');
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
- fileCount += hookFiles.length;
173
- }
141
+ };
142
+ makeExecutable(claudeBase);
174
143
 
175
- // 6. Configure hooks in settings.json
176
- installHooks(isGlobal, hooksBase);
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 skills
283
+ * Uninstall GSD-CC
312
284
  */
313
285
  function uninstall() {
314
- const locations = [getSkillsBase(true), getSkillsBase(false)];
315
- const allDirs = ['gsd-cc', ...SUB_SKILLS.map(s => `gsd-cc-${s}`), 'gsd-cc-shared', 'gsd'];
316
- const sharedDirs = ['checklists', 'prompts', 'templates', 'hooks'];
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 base of locations) {
321
- const label = base.includes(os.homedir())
322
- ? base.replace(os.homedir(), '~')
323
- : base.replace(process.cwd(), '.');
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
- for (const dir of allDirs) {
327
- const fullPath = path.join(base, dir);
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
- // Remove shared dirs from .claude/
334
- const claudeDir = base.replace(/\/skills$/, '');
335
- for (const dir of sharedDirs) {
336
- const fullPath = path.join(claudeDir, dir);
337
- if (removeDir(fullPath)) {
338
- removedFromLocation = true;
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 = getSkillsBase(true).replace(os.homedir(), '~');
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/skills/)${reset} — this project only
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.4.1",
3
+ "version": "1.5.1",
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