genskills 1.0.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.
Files changed (97) hide show
  1. package/README.md +259 -0
  2. package/dist/cli/commands/clean.d.ts +3 -0
  3. package/dist/cli/commands/clean.d.ts.map +1 -0
  4. package/dist/cli/commands/clean.js +100 -0
  5. package/dist/cli/commands/clean.js.map +1 -0
  6. package/dist/cli/commands/disable.d.ts +3 -0
  7. package/dist/cli/commands/disable.d.ts.map +1 -0
  8. package/dist/cli/commands/disable.js +44 -0
  9. package/dist/cli/commands/disable.js.map +1 -0
  10. package/dist/cli/commands/doctor.d.ts +3 -0
  11. package/dist/cli/commands/doctor.d.ts.map +1 -0
  12. package/dist/cli/commands/doctor.js +151 -0
  13. package/dist/cli/commands/doctor.js.map +1 -0
  14. package/dist/cli/commands/enable.d.ts +3 -0
  15. package/dist/cli/commands/enable.d.ts.map +1 -0
  16. package/dist/cli/commands/enable.js +48 -0
  17. package/dist/cli/commands/enable.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +3 -0
  19. package/dist/cli/commands/init.d.ts.map +1 -0
  20. package/dist/cli/commands/init.js +94 -0
  21. package/dist/cli/commands/init.js.map +1 -0
  22. package/dist/cli/commands/install.d.ts +3 -0
  23. package/dist/cli/commands/install.d.ts.map +1 -0
  24. package/dist/cli/commands/install.js +40 -0
  25. package/dist/cli/commands/install.js.map +1 -0
  26. package/dist/cli/commands/list.d.ts +3 -0
  27. package/dist/cli/commands/list.d.ts.map +1 -0
  28. package/dist/cli/commands/list.js +60 -0
  29. package/dist/cli/commands/list.js.map +1 -0
  30. package/dist/cli/commands/update.d.ts +3 -0
  31. package/dist/cli/commands/update.d.ts.map +1 -0
  32. package/dist/cli/commands/update.js +58 -0
  33. package/dist/cli/commands/update.js.map +1 -0
  34. package/dist/cli/index.d.ts +8 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +33 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/utils/config-loader.d.ts +37 -0
  39. package/dist/cli/utils/config-loader.d.ts.map +1 -0
  40. package/dist/cli/utils/config-loader.js +129 -0
  41. package/dist/cli/utils/config-loader.js.map +1 -0
  42. package/dist/cli/utils/copy.d.ts +26 -0
  43. package/dist/cli/utils/copy.d.ts.map +1 -0
  44. package/dist/cli/utils/copy.js +182 -0
  45. package/dist/cli/utils/copy.js.map +1 -0
  46. package/dist/cli/utils/dependency-resolver.d.ts +26 -0
  47. package/dist/cli/utils/dependency-resolver.d.ts.map +1 -0
  48. package/dist/cli/utils/dependency-resolver.js +181 -0
  49. package/dist/cli/utils/dependency-resolver.js.map +1 -0
  50. package/dist/cli/utils/hooks.d.ts +22 -0
  51. package/dist/cli/utils/hooks.d.ts.map +1 -0
  52. package/dist/cli/utils/hooks.js +124 -0
  53. package/dist/cli/utils/hooks.js.map +1 -0
  54. package/dist/cli/utils/logger.d.ts +13 -0
  55. package/dist/cli/utils/logger.d.ts.map +1 -0
  56. package/dist/cli/utils/logger.js +57 -0
  57. package/dist/cli/utils/logger.js.map +1 -0
  58. package/dist/cli/utils/manifest.d.ts +29 -0
  59. package/dist/cli/utils/manifest.d.ts.map +1 -0
  60. package/dist/cli/utils/manifest.js +110 -0
  61. package/dist/cli/utils/manifest.js.map +1 -0
  62. package/dist/cli/utils/paths.d.ts +46 -0
  63. package/dist/cli/utils/paths.d.ts.map +1 -0
  64. package/dist/cli/utils/paths.js +150 -0
  65. package/dist/cli/utils/paths.js.map +1 -0
  66. package/dist/index.d.ts +12 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +30 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/postinstall.d.ts +9 -0
  71. package/dist/postinstall.d.ts.map +1 -0
  72. package/dist/postinstall.js +58 -0
  73. package/dist/postinstall.js.map +1 -0
  74. package/package.json +52 -0
  75. package/plugin.json +60 -0
  76. package/schemas/genskills-config.schema.json +91 -0
  77. package/skills/code-quality/code-review/SKILL.md +65 -0
  78. package/skills/code-quality/lint-fix/SKILL.md +44 -0
  79. package/skills/code-quality/refactor/SKILL.md +43 -0
  80. package/skills/code-quality/security-audit/SKILL.md +71 -0
  81. package/skills/code-quality/test-generator/SKILL.md +51 -0
  82. package/skills/code-quality/type-check/SKILL.md +41 -0
  83. package/skills/development/debug/SKILL.md +53 -0
  84. package/skills/development/migrate/SKILL.md +50 -0
  85. package/skills/development/perf-optimize/SKILL.md +64 -0
  86. package/skills/development/scaffold/SKILL.md +52 -0
  87. package/skills/documentation/api-docs/SKILL.md +51 -0
  88. package/skills/documentation/doc-gen/SKILL.md +49 -0
  89. package/skills/documentation/readme-gen/SKILL.md +68 -0
  90. package/skills/project-management/changelog-gen/SKILL.md +61 -0
  91. package/skills/project-management/release-notes/SKILL.md +62 -0
  92. package/skills/project-management/task-tracker/SKILL.md +42 -0
  93. package/skills/workflow/branch-manager/SKILL.md +50 -0
  94. package/skills/workflow/ci-fix/SKILL.md +44 -0
  95. package/skills/workflow/deploy/SKILL.md +53 -0
  96. package/skills/workflow/git-commit/SKILL.md +58 -0
  97. package/skills/workflow/pr-create/SKILL.md +53 -0
package/README.md ADDED
@@ -0,0 +1,259 @@
1
+ # GenSkills
2
+
3
+ A comprehensive Claude Code skills library. Install once, get 21 AI-powered skills that supercharge your development workflow.
4
+
5
+ ```bash
6
+ npm install genskills
7
+ ```
8
+
9
+ Skills are automatically installed into your project's `.claude/skills/` directory. No extra setup needed.
10
+
11
+ ---
12
+
13
+ ## What You Get
14
+
15
+ **21 skills** across 5 categories, ready to use as `/genskills:<skill-name>` in Claude Code.
16
+
17
+ ### Code Quality
18
+
19
+ | Skill | Command | Description |
20
+ |-------|---------|-------------|
21
+ | Code Review | `/genskills:code-review` | Multi-dimensional code review with security, performance, and best-practice analysis |
22
+ | Refactor | `/genskills:refactor` | Improve code structure and readability while preserving behavior |
23
+ | Security Audit | `/genskills:security-audit` | OWASP Top 10 vulnerability scanning, dependency audit, infrastructure checks |
24
+ | Test Generator | `/genskills:test-generator` | Generate test suites for Jest, Vitest, pytest, and more |
25
+ | Lint Fix | `/genskills:lint-fix` | Auto-fix linting and formatting issues (ESLint, Prettier, Ruff, Black) |
26
+ | Type Check | `/genskills:type-check` | Run type checking and resolve errors (TypeScript, mypy, pyright) |
27
+
28
+ ### Workflow
29
+
30
+ | Skill | Command | Description |
31
+ |-------|---------|-------------|
32
+ | Git Commit | `/genskills:git-commit` | Conventional commits with smart staging and AI-generated messages |
33
+ | PR Create | `/genskills:pr-create` | Create pull requests with generated titles, descriptions, and test plans |
34
+ | Deploy | `/genskills:deploy` | Guided deployment with pre-deploy checks and post-deploy verification |
35
+ | CI Fix | `/genskills:ci-fix` | Diagnose and fix failing CI/CD pipelines from build logs |
36
+ | Branch Manager | `/genskills:branch-manager` | Create, merge, rebase, and clean up branches |
37
+
38
+ ### Project Management
39
+
40
+ | Skill | Command | Description |
41
+ |-------|---------|-------------|
42
+ | Task Tracker | `/genskills:task-tracker` | Track TODOs, manage tasks, show project status |
43
+ | Changelog Gen | `/genskills:changelog-gen` | Generate CHANGELOG.md from git history (Keep a Changelog format) |
44
+ | Release Notes | `/genskills:release-notes` | Polished release notes for GitHub Releases |
45
+
46
+ ### Documentation
47
+
48
+ | Skill | Command | Description |
49
+ |-------|---------|-------------|
50
+ | Doc Gen | `/genskills:doc-gen` | Generate JSDoc, docstrings, and inline documentation |
51
+ | API Docs | `/genskills:api-docs` | Generate OpenAPI specs and API endpoint references |
52
+ | README Gen | `/genskills:readme-gen` | Generate or update project README files |
53
+
54
+ ### Development
55
+
56
+ | Skill | Command | Description |
57
+ |-------|---------|-------------|
58
+ | Scaffold | `/genskills:scaffold` | Generate components, modules, services following project patterns |
59
+ | Migrate | `/genskills:migrate` | Framework upgrades, dependency migrations, pattern modernization |
60
+ | Debug | `/genskills:debug` | Systematic debugging — trace errors, find root causes, apply fixes |
61
+ | Perf Optimize | `/genskills:perf-optimize` | Identify bottlenecks, optimize queries, reduce bundle size |
62
+
63
+ ---
64
+
65
+ ## CLI
66
+
67
+ Manage your skills with the `genskills` CLI:
68
+
69
+ ```bash
70
+ npx genskills <command>
71
+ ```
72
+
73
+ | Command | Description |
74
+ |---------|-------------|
75
+ | `genskills list` | List all available skills and their status |
76
+ | `genskills list --installed` | Show only installed skills |
77
+ | `genskills install` | Install or reinstall all enabled skills |
78
+ | `genskills install <skill>` | Install a specific skill |
79
+ | `genskills install --force` | Force reinstall even if unchanged |
80
+ | `genskills enable <name>` | Enable a skill or category |
81
+ | `genskills disable <name>` | Disable and remove a skill or category |
82
+ | `genskills init` | Create a `genskills.config.json` interactively |
83
+ | `genskills init -y` | Create config with all defaults |
84
+ | `genskills update` | Check for and apply skill updates |
85
+ | `genskills update --check` | Dry run — show what would change |
86
+ | `genskills doctor` | Diagnose installation issues |
87
+ | `genskills clean` | Remove orphaned skills |
88
+ | `genskills clean --backups` | Also remove backup directory |
89
+
90
+ ---
91
+
92
+ ## Configuration
93
+
94
+ Customize which skills are installed by creating a `genskills.config.json` at your project root:
95
+
96
+ ```bash
97
+ npx genskills init
98
+ ```
99
+
100
+ Or create it manually:
101
+
102
+ ```json
103
+ {
104
+ "$schema": "./node_modules/genskills/schemas/genskills-config.schema.json",
105
+ "version": "1.0",
106
+ "categories": {
107
+ "code-quality": true,
108
+ "workflow": true,
109
+ "project-management": true,
110
+ "documentation": false,
111
+ "development": true
112
+ },
113
+ "skills": {
114
+ "deploy": {
115
+ "enabled": false
116
+ },
117
+ "code-review": {
118
+ "enabled": true,
119
+ "settings": {
120
+ "defaultMode": "deep",
121
+ "languages": ["typescript", "python"]
122
+ }
123
+ }
124
+ },
125
+ "hooks": {
126
+ "autoRegister": true
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### Config Resolution
132
+
133
+ - Individual skill `enabled` **overrides** its category setting
134
+ - If a category is `false` but a skill within it is `enabled: true`, that skill gets installed
135
+ - If a category is `true` but a skill is `enabled: false`, that skill is skipped
136
+ - Without a config file, **all skills are installed**
137
+
138
+ ### Per-Skill Settings
139
+
140
+ Each skill's `settings` object is written as a `_config.json` file alongside its `SKILL.md`. Skills read this file at runtime to customize their behavior.
141
+
142
+ ---
143
+
144
+ ## How It Works
145
+
146
+ ### On Install
147
+
148
+ When you run `npm install genskills`, the postinstall script:
149
+
150
+ 1. Detects your project root
151
+ 2. Reads `genskills.config.json` (if it exists)
152
+ 3. Copies enabled skills into `.claude/skills/genskills--<name>/`
153
+ 4. Writes a `.genskills-manifest.json` to track versions and checksums
154
+ 5. Backs up any previously installed skills before overwriting
155
+
156
+ ### Namespacing
157
+
158
+ All installed skills are prefixed with `genskills--` to avoid conflicts with your own custom skills:
159
+
160
+ ```
161
+ .claude/skills/
162
+ genskills--code-review/ # managed by GenSkills
163
+ genskills--debug/ # managed by GenSkills
164
+ my-custom-skill/ # yours — never touched
165
+ ```
166
+
167
+ ### Updates
168
+
169
+ When you update the package, the postinstall script compares checksums:
170
+
171
+ - **Changed skills** are backed up to `.genskills-backup/` then overwritten
172
+ - **New skills** are installed if their category is enabled
173
+ - **Removed skills** are flagged but not deleted (use `genskills clean`)
174
+
175
+ ### Skill Dependencies
176
+
177
+ Some skills declare soft dependencies on other skills:
178
+
179
+ ```yaml
180
+ genskills-depends:
181
+ - genskills:git-commit
182
+ ```
183
+
184
+ When you enable a skill, its dependencies are auto-enabled. Dependencies are soft — if a dependency is missing, the skill still works but with reduced capability.
185
+
186
+ ---
187
+
188
+ ## Skill Format
189
+
190
+ Each skill is a directory containing a `SKILL.md` with YAML frontmatter:
191
+
192
+ ```yaml
193
+ ---
194
+ name: genskills:skill-name
195
+ description: >
196
+ What this skill does and when it should trigger.
197
+ user-invocable: true
198
+ argument-hint: "[arguments description]"
199
+ allowed-tools: "Read, Edit, Grep, Glob, Bash(git *)"
200
+ genskills-version: "1.0.0"
201
+ genskills-category: "category-name"
202
+ genskills-depends: []
203
+ ---
204
+
205
+ # Skill Title
206
+
207
+ Instructions for Claude on how to execute this skill...
208
+ ```
209
+
210
+ Skills can also include supporting files like reference docs, templates, and scripts in their directory.
211
+
212
+ ---
213
+
214
+ ## Troubleshooting
215
+
216
+ ### Skills not showing up in Claude Code
217
+
218
+ Run the doctor to check for issues:
219
+
220
+ ```bash
221
+ npx genskills doctor
222
+ ```
223
+
224
+ ### Force reinstall all skills
225
+
226
+ ```bash
227
+ npx genskills install --force
228
+ ```
229
+
230
+ ### Skills were modified locally
231
+
232
+ The doctor command detects checksum drift. To reset to the original versions:
233
+
234
+ ```bash
235
+ npx genskills install --force
236
+ ```
237
+
238
+ Your modified versions are backed up to `.claude/skills/.genskills-backup/`.
239
+
240
+ ### Config file not working
241
+
242
+ Validate your config against the JSON schema:
243
+
244
+ ```json
245
+ {
246
+ "$schema": "./node_modules/genskills/schemas/genskills-config.schema.json"
247
+ }
248
+ ```
249
+
250
+ ---
251
+
252
+ ## Requirements
253
+
254
+ - Node.js >= 18.0.0
255
+ - Claude Code CLI
256
+
257
+ ## License
258
+
259
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerCleanCommand(program: Command): void;
3
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8D3D"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerCleanCommand = registerCleanCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const paths_1 = require("../utils/paths");
40
+ const manifest_1 = require("../utils/manifest");
41
+ const logger_1 = require("../utils/logger");
42
+ function registerCleanCommand(program) {
43
+ program
44
+ .command("clean")
45
+ .description("Remove orphaned skills and old backups")
46
+ .option("--backups", "Also remove backup directory")
47
+ .action((opts) => {
48
+ const projectRoot = (0, paths_1.findProjectRoot)();
49
+ const skillsDir = (0, paths_1.getSkillsDir)(projectRoot);
50
+ const manifest = (0, manifest_1.readManifest)(projectRoot);
51
+ logger_1.logger.header("GenSkills — Clean");
52
+ logger_1.logger.br();
53
+ if (!fs.existsSync(skillsDir)) {
54
+ logger_1.logger.info("No skills directory found. Nothing to clean.");
55
+ return;
56
+ }
57
+ // Find all valid skill names from the package
58
+ const validSkills = new Set();
59
+ for (const category of (0, paths_1.getCategories)()) {
60
+ for (const skill of (0, paths_1.getSkillsInCategory)(category)) {
61
+ validSkills.add(`genskills--${skill}`);
62
+ }
63
+ }
64
+ // Find installed genskills directories
65
+ const installed = fs
66
+ .readdirSync(skillsDir, { withFileTypes: true })
67
+ .filter((d) => d.isDirectory() && d.name.startsWith("genskills--"))
68
+ .map((d) => d.name);
69
+ // Remove orphans (installed but no longer in package)
70
+ let orphanCount = 0;
71
+ for (const dir of installed) {
72
+ if (!validSkills.has(dir)) {
73
+ const fullPath = path.join(skillsDir, dir);
74
+ fs.rmSync(fullPath, { recursive: true, force: true });
75
+ delete manifest.skills[dir];
76
+ logger_1.logger.step(`Removed orphan: ${dir}`);
77
+ orphanCount++;
78
+ }
79
+ }
80
+ if (orphanCount === 0) {
81
+ logger_1.logger.success("No orphaned skills found.");
82
+ }
83
+ else {
84
+ logger_1.logger.success(`Removed ${orphanCount} orphaned skill(s).`);
85
+ (0, manifest_1.writeManifest)(projectRoot, manifest);
86
+ }
87
+ // Clean backups
88
+ if (opts.backups) {
89
+ const backupDir = (0, paths_1.getBackupDir)(projectRoot);
90
+ if (fs.existsSync(backupDir)) {
91
+ fs.rmSync(backupDir, { recursive: true, force: true });
92
+ logger_1.logger.success("Removed backup directory.");
93
+ }
94
+ else {
95
+ logger_1.logger.info("No backup directory found.");
96
+ }
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerDisableCommand(program: Command): void;
3
+ //# sourceMappingURL=disable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/disable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC7D"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDisableCommand = registerDisableCommand;
4
+ const paths_1 = require("../utils/paths");
5
+ const config_loader_1 = require("../utils/config-loader");
6
+ const copy_1 = require("../utils/copy");
7
+ const logger_1 = require("../utils/logger");
8
+ function registerDisableCommand(program) {
9
+ program
10
+ .command("disable <name>")
11
+ .description("Disable a skill or category and remove it")
12
+ .action((name) => {
13
+ const projectRoot = (0, paths_1.findProjectRoot)();
14
+ const config = (0, config_loader_1.loadConfig)(projectRoot);
15
+ const categories = (0, paths_1.getCategories)();
16
+ // Check if it's a category
17
+ if (categories.includes(name)) {
18
+ config.categories[name] = false;
19
+ (0, config_loader_1.saveConfig)(projectRoot, config);
20
+ // Remove all skills in category
21
+ const skills = (0, paths_1.getSkillsInCategory)(name);
22
+ let removed = 0;
23
+ for (const skill of skills) {
24
+ if ((0, copy_1.removeSkill)(projectRoot, skill))
25
+ removed++;
26
+ }
27
+ logger_1.logger.success(`Disabled category: ${name} (removed ${removed} skill(s))`);
28
+ return;
29
+ }
30
+ // It's a skill name
31
+ if (!config.skills[name]) {
32
+ config.skills[name] = {};
33
+ }
34
+ config.skills[name].enabled = false;
35
+ (0, config_loader_1.saveConfig)(projectRoot, config);
36
+ if ((0, copy_1.removeSkill)(projectRoot, name)) {
37
+ logger_1.logger.success(`Disabled and removed skill: ${name}`);
38
+ }
39
+ else {
40
+ logger_1.logger.success(`Disabled skill: ${name} (was not installed)`);
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/cli/commands/disable.ts"],"names":[],"mappings":";;AAUA,wDAwCC;AAjDD,0CAIwB;AACxB,0DAAgE;AAChE,wCAA4C;AAC5C,4CAAyC;AAEzC,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,IAAA,uBAAe,GAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,0BAAU,EAAC,WAAW,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAA,qBAAa,GAAE,CAAC;QAEnC,2BAA2B;QAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAChC,IAAA,0BAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEhC,gCAAgC;YAChC,MAAM,MAAM,GAAG,IAAA,2BAAmB,EAAC,IAAI,CAAC,CAAC;YACzC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,IAAA,kBAAW,EAAC,WAAW,EAAE,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAC;YACjD,CAAC;YAED,eAAM,CAAC,OAAO,CACZ,sBAAsB,IAAI,aAAa,OAAO,YAAY,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;QACpC,IAAA,0BAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEhC,IAAI,IAAA,kBAAW,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,OAAO,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,sBAAsB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerDoctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqH5D"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerDoctorCommand = registerDoctorCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const paths_1 = require("../utils/paths");
40
+ const manifest_1 = require("../utils/manifest");
41
+ const config_loader_1 = require("../utils/config-loader");
42
+ const copy_1 = require("../utils/copy");
43
+ const dependency_resolver_1 = require("../utils/dependency-resolver");
44
+ const logger_1 = require("../utils/logger");
45
+ function registerDoctorCommand(program) {
46
+ program
47
+ .command("doctor")
48
+ .description("Diagnose issues with your genskills installation")
49
+ .action(() => {
50
+ const projectRoot = (0, paths_1.findProjectRoot)();
51
+ let issues = 0;
52
+ logger_1.logger.header("GenSkills — Doctor");
53
+ logger_1.logger.br();
54
+ // 1. Check skills directory exists
55
+ const skillsDir = (0, paths_1.getSkillsDir)(projectRoot);
56
+ if (!fs.existsSync(skillsDir)) {
57
+ logger_1.logger.error(".claude/skills/ directory does not exist");
58
+ logger_1.logger.info("Run `npx genskills install` to create it.");
59
+ issues++;
60
+ }
61
+ else {
62
+ logger_1.logger.success(".claude/skills/ directory exists");
63
+ }
64
+ // 2. Check manifest
65
+ const manifest = (0, manifest_1.readManifest)(projectRoot);
66
+ const installedSkills = (0, copy_1.getInstalledSkills)(projectRoot);
67
+ if (Object.keys(manifest.skills).length === 0 && installedSkills.length > 0) {
68
+ logger_1.logger.warn("Skills installed but manifest is empty — run `npx genskills install --force`");
69
+ issues++;
70
+ }
71
+ else {
72
+ logger_1.logger.success(`Manifest tracks ${Object.keys(manifest.skills).length} skill(s)`);
73
+ }
74
+ // 3. Check version
75
+ const currentVersion = (0, manifest_1.getPackageVersion)();
76
+ if (manifest.packageVersion !== currentVersion) {
77
+ logger_1.logger.warn(`Manifest version (${manifest.packageVersion}) differs from package (${currentVersion})`);
78
+ logger_1.logger.info("Run `npx genskills update` to sync.");
79
+ issues++;
80
+ }
81
+ // 4. Check for checksum drift (user modified installed skills)
82
+ const config = (0, config_loader_1.loadConfig)(projectRoot);
83
+ const categories = (0, paths_1.getCategories)();
84
+ let driftCount = 0;
85
+ for (const category of categories) {
86
+ for (const skill of (0, paths_1.getSkillsInCategory)(category)) {
87
+ const manifestKey = `genskills--${skill}`;
88
+ const entry = manifest.skills[manifestKey];
89
+ if (!entry)
90
+ continue;
91
+ const installedDir = path.join(skillsDir, manifestKey);
92
+ if (fs.existsSync(installedDir)) {
93
+ const currentChecksum = (0, manifest_1.computeChecksum)(installedDir);
94
+ if (currentChecksum !== entry.checksum) {
95
+ logger_1.logger.warn(`Skill "${skill}" has been modified locally`);
96
+ driftCount++;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ if (driftCount === 0) {
102
+ logger_1.logger.success("No checksum drift detected");
103
+ }
104
+ else {
105
+ logger_1.logger.warn(`${driftCount} skill(s) modified. Run \`npx genskills install --force\` to reset.`);
106
+ issues++;
107
+ }
108
+ // 5. Check for duplicate/conflicting skills
109
+ const allDirs = fs.existsSync(skillsDir)
110
+ ? fs.readdirSync(skillsDir, { withFileTypes: true })
111
+ .filter((d) => d.isDirectory() && !d.name.startsWith("."))
112
+ .map((d) => d.name)
113
+ : [];
114
+ const userSkills = allDirs.filter((d) => !d.startsWith("genskills--"));
115
+ const genskillsNames = new Set(installedSkills);
116
+ for (const userSkill of userSkills) {
117
+ if (genskillsNames.has(userSkill)) {
118
+ logger_1.logger.warn(`Potential conflict: user skill "${userSkill}" overlaps with genskills skill`);
119
+ issues++;
120
+ }
121
+ }
122
+ if (userSkills.length > 0 && issues === 0) {
123
+ logger_1.logger.success(`${userSkills.length} user skill(s) — no conflicts`);
124
+ }
125
+ // 6. Check dependencies
126
+ try {
127
+ const depResult = (0, dependency_resolver_1.resolveDependencies)(projectRoot);
128
+ if (depResult.missing.length > 0) {
129
+ for (const m of depResult.missing) {
130
+ logger_1.logger.warn(`Missing dependency: "${m.skill}" requires "${m.dependency}"`);
131
+ }
132
+ issues += depResult.missing.length;
133
+ }
134
+ else {
135
+ logger_1.logger.success("All skill dependencies satisfied");
136
+ }
137
+ }
138
+ catch {
139
+ logger_1.logger.success("No dependency issues");
140
+ }
141
+ // Summary
142
+ logger_1.logger.br();
143
+ if (issues === 0) {
144
+ logger_1.logger.success("No issues found! Everything looks good.");
145
+ }
146
+ else {
147
+ logger_1.logger.warn(`Found ${issues} issue(s). See above for details.`);
148
+ }
149
+ });
150
+ }
151
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerEnableCommand(program: Command): void;
3
+ //# sourceMappingURL=enable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/enable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC5D"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerEnableCommand = registerEnableCommand;
4
+ const paths_1 = require("../utils/paths");
5
+ const config_loader_1 = require("../utils/config-loader");
6
+ const copy_1 = require("../utils/copy");
7
+ const logger_1 = require("../utils/logger");
8
+ function registerEnableCommand(program) {
9
+ program
10
+ .command("enable <name>")
11
+ .description("Enable a skill or category")
12
+ .action((name) => {
13
+ const projectRoot = (0, paths_1.findProjectRoot)();
14
+ const config = (0, config_loader_1.loadConfig)(projectRoot);
15
+ const categories = (0, paths_1.getCategories)();
16
+ // Check if it's a category
17
+ if (categories.includes(name)) {
18
+ config.categories[name] = true;
19
+ (0, config_loader_1.saveConfig)(projectRoot, config);
20
+ logger_1.logger.success(`Enabled category: ${name}`);
21
+ // Install newly enabled skills
22
+ logger_1.logger.step("Installing skills from enabled category...");
23
+ const result = (0, copy_1.installSkills)(projectRoot);
24
+ if (result.installed.length > 0) {
25
+ logger_1.logger.success(`Installed: ${result.installed.join(", ")}`);
26
+ }
27
+ return;
28
+ }
29
+ // It's a skill name
30
+ if (!config.skills[name]) {
31
+ config.skills[name] = {};
32
+ }
33
+ config.skills[name].enabled = true;
34
+ (0, config_loader_1.saveConfig)(projectRoot, config);
35
+ logger_1.logger.success(`Enabled skill: ${name}`);
36
+ // Install the specific skill
37
+ logger_1.logger.step("Installing skill...");
38
+ const result = (0, copy_1.installSkills)(projectRoot, { specific: name });
39
+ if (result.installed.length > 0) {
40
+ logger_1.logger.success(`Installed: ${result.installed.join(", ")}`);
41
+ }
42
+ else if (result.errors.length > 0) {
43
+ for (const err of result.errors)
44
+ logger_1.logger.error(err);
45
+ }
46
+ });
47
+ }
48
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../../src/cli/commands/enable.ts"],"names":[],"mappings":";;AAMA,sDAyCC;AA9CD,0CAAgE;AAChE,0DAAgE;AAChE,wCAA8C;AAC9C,4CAAyC;AAEzC,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,IAAA,uBAAe,GAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,0BAAU,EAAC,WAAW,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAA,qBAAa,GAAE,CAAC;QAEnC,2BAA2B;QAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC/B,IAAA,0BAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAChC,eAAM,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;YAE5C,+BAA+B;YAC/B,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,eAAM,CAAC,OAAO,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO;QACT,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACnC,IAAA,0BAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChC,eAAM,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAEzC,6BAA6B;QAC7B,eAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,eAAM,CAAC,OAAO,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM;gBAAE,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map