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.
- package/README.md +259 -0
- package/dist/cli/commands/clean.d.ts +3 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +100 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/disable.d.ts +3 -0
- package/dist/cli/commands/disable.d.ts.map +1 -0
- package/dist/cli/commands/disable.js +44 -0
- package/dist/cli/commands/disable.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +151 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/enable.d.ts +3 -0
- package/dist/cli/commands/enable.d.ts.map +1 -0
- package/dist/cli/commands/enable.js +48 -0
- package/dist/cli/commands/enable.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +94 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +3 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +40 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +60 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +58 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +33 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/config-loader.d.ts +37 -0
- package/dist/cli/utils/config-loader.d.ts.map +1 -0
- package/dist/cli/utils/config-loader.js +129 -0
- package/dist/cli/utils/config-loader.js.map +1 -0
- package/dist/cli/utils/copy.d.ts +26 -0
- package/dist/cli/utils/copy.d.ts.map +1 -0
- package/dist/cli/utils/copy.js +182 -0
- package/dist/cli/utils/copy.js.map +1 -0
- package/dist/cli/utils/dependency-resolver.d.ts +26 -0
- package/dist/cli/utils/dependency-resolver.d.ts.map +1 -0
- package/dist/cli/utils/dependency-resolver.js +181 -0
- package/dist/cli/utils/dependency-resolver.js.map +1 -0
- package/dist/cli/utils/hooks.d.ts +22 -0
- package/dist/cli/utils/hooks.d.ts.map +1 -0
- package/dist/cli/utils/hooks.js +124 -0
- package/dist/cli/utils/hooks.js.map +1 -0
- package/dist/cli/utils/logger.d.ts +13 -0
- package/dist/cli/utils/logger.d.ts.map +1 -0
- package/dist/cli/utils/logger.js +57 -0
- package/dist/cli/utils/logger.js.map +1 -0
- package/dist/cli/utils/manifest.d.ts +29 -0
- package/dist/cli/utils/manifest.d.ts.map +1 -0
- package/dist/cli/utils/manifest.js +110 -0
- package/dist/cli/utils/manifest.js.map +1 -0
- package/dist/cli/utils/paths.d.ts +46 -0
- package/dist/cli/utils/paths.d.ts.map +1 -0
- package/dist/cli/utils/paths.js +150 -0
- package/dist/cli/utils/paths.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/postinstall.d.ts +9 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +58 -0
- package/dist/postinstall.js.map +1 -0
- package/package.json +52 -0
- package/plugin.json +60 -0
- package/schemas/genskills-config.schema.json +91 -0
- package/skills/code-quality/code-review/SKILL.md +65 -0
- package/skills/code-quality/lint-fix/SKILL.md +44 -0
- package/skills/code-quality/refactor/SKILL.md +43 -0
- package/skills/code-quality/security-audit/SKILL.md +71 -0
- package/skills/code-quality/test-generator/SKILL.md +51 -0
- package/skills/code-quality/type-check/SKILL.md +41 -0
- package/skills/development/debug/SKILL.md +53 -0
- package/skills/development/migrate/SKILL.md +50 -0
- package/skills/development/perf-optimize/SKILL.md +64 -0
- package/skills/development/scaffold/SKILL.md +52 -0
- package/skills/documentation/api-docs/SKILL.md +51 -0
- package/skills/documentation/doc-gen/SKILL.md +49 -0
- package/skills/documentation/readme-gen/SKILL.md +68 -0
- package/skills/project-management/changelog-gen/SKILL.md +61 -0
- package/skills/project-management/release-notes/SKILL.md +62 -0
- package/skills/project-management/task-tracker/SKILL.md +42 -0
- package/skills/workflow/branch-manager/SKILL.md +50 -0
- package/skills/workflow/ci-fix/SKILL.md +44 -0
- package/skills/workflow/deploy/SKILL.md +53 -0
- package/skills/workflow/git-commit/SKILL.md +58 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|