genskills 1.0.0 → 1.0.2
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 +31 -138
- package/dist/cli/commands/clean.d.ts.map +1 -1
- package/dist/cli/commands/clean.js +10 -6
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +7 -6
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/init.js +22 -15
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/utils/copy.d.ts.map +1 -1
- package/dist/cli/utils/copy.js +19 -15
- package/dist/cli/utils/copy.js.map +1 -1
- package/dist/cli/utils/manifest.d.ts +2 -2
- package/dist/cli/utils/manifest.d.ts.map +1 -1
- package/dist/cli/utils/manifest.js +4 -4
- package/dist/cli/utils/manifest.js.map +1 -1
- package/dist/cli/utils/paths.d.ts +8 -7
- package/dist/cli/utils/paths.d.ts.map +1 -1
- package/dist/cli/utils/paths.js +17 -13
- package/dist/cli/utils/paths.js.map +1 -1
- package/package.json +4 -7
- package/skills/code-quality/accessibility-audit/SKILL.md +92 -0
- package/skills/code-quality/code-review/SKILL.md +8 -3
- package/skills/code-quality/dependency-audit/SKILL.md +86 -0
- package/skills/code-quality/error-boundary/SKILL.md +81 -0
- package/skills/code-quality/refactor/SKILL.md +1 -1
- package/skills/code-quality/security-audit/SKILL.md +2 -2
- package/skills/development/db-migrate/SKILL.md +73 -0
- package/skills/development/debug/SKILL.md +2 -2
- package/skills/development/env-setup/SKILL.md +81 -0
- package/skills/development/i18n/SKILL.md +68 -0
- package/skills/development/perf-optimize/SKILL.md +2 -2
- package/skills/development/scaffold/SKILL.md +2 -2
- package/skills/workflow/deploy/SKILL.md +6 -4
- package/skills/workflow/monorepo/SKILL.md +66 -0
package/README.md
CHANGED
|
@@ -1,64 +1,38 @@
|
|
|
1
1
|
# GenSkills
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/genskills)
|
|
4
|
+
[](https://www.npmjs.com/package/genskills)
|
|
5
|
+
[]
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
[](https://genskills.dev)
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
npm install genskills
|
|
7
|
-
```
|
|
9
|
+
AI-powered skills that enhance your Claude Code development workflow. Code review, testing, deployment, documentation — all automated.
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
Completely free and open-source.
|
|
10
12
|
|
|
11
13
|
---
|
|
12
14
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
**21 skills** across 5 categories, ready to use as `/genskills:<skill-name>` in Claude Code.
|
|
15
|
+
## Quick Start
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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 |
|
|
17
|
+
```bash
|
|
18
|
+
npx genskills install
|
|
19
|
+
```
|
|
37
20
|
|
|
38
|
-
|
|
21
|
+
That's it. All skills are installed into your project's `.claude/skills/` directory with zero configuration. Use them as `/genskills:<skill-name>` in Claude Code.
|
|
39
22
|
|
|
40
|
-
|
|
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 |
|
|
23
|
+
---
|
|
45
24
|
|
|
46
|
-
|
|
25
|
+
## What You Get
|
|
47
26
|
|
|
48
|
-
|
|
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 |
|
|
27
|
+
**All skills** across **5 categories**:
|
|
53
28
|
|
|
54
|
-
|
|
29
|
+
- **Code Quality** — review, refactoring, security audit, testing, linting, type-checking
|
|
30
|
+
- **Workflow** — git commits, pull requests, deployment, CI/CD fixes, branch management
|
|
31
|
+
- **Project Management** — task tracking, changelog generation, release notes
|
|
32
|
+
- **Documentation** — code docs, API docs, README generation
|
|
33
|
+
- **Development** — scaffolding, migrations, debugging, performance optimization
|
|
55
34
|
|
|
56
|
-
|
|
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 |
|
|
35
|
+
Browse all skills and details at **[genskills.dev/skills](https://genskills.dev/skills)**
|
|
62
36
|
|
|
63
37
|
---
|
|
64
38
|
|
|
@@ -135,17 +109,11 @@ Or create it manually:
|
|
|
135
109
|
- If a category is `true` but a skill is `enabled: false`, that skill is skipped
|
|
136
110
|
- Without a config file, **all skills are installed**
|
|
137
111
|
|
|
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
112
|
---
|
|
143
113
|
|
|
144
114
|
## How It Works
|
|
145
115
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
When you run `npm install genskills`, the postinstall script:
|
|
116
|
+
When you run `npx genskills install`, the installer:
|
|
149
117
|
|
|
150
118
|
1. Detects your project root
|
|
151
119
|
2. Reads `genskills.config.json` (if it exists)
|
|
@@ -153,106 +121,31 @@ When you run `npm install genskills`, the postinstall script:
|
|
|
153
121
|
4. Writes a `.genskills-manifest.json` to track versions and checksums
|
|
154
122
|
5. Backs up any previously installed skills before overwriting
|
|
155
123
|
|
|
156
|
-
|
|
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.
|
|
124
|
+
All installed skills are prefixed with `genskills--` to avoid conflicts with your own custom skills.
|
|
211
125
|
|
|
212
126
|
---
|
|
213
127
|
|
|
214
128
|
## Troubleshooting
|
|
215
129
|
|
|
216
|
-
### Skills not showing up in Claude Code
|
|
217
|
-
|
|
218
|
-
Run the doctor to check for issues:
|
|
219
|
-
|
|
220
130
|
```bash
|
|
131
|
+
# Check for issues
|
|
221
132
|
npx genskills doctor
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Force reinstall all skills
|
|
225
133
|
|
|
226
|
-
|
|
134
|
+
# Force reinstall all skills
|
|
227
135
|
npx genskills install --force
|
|
228
136
|
```
|
|
229
137
|
|
|
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
138
|
---
|
|
251
139
|
|
|
252
140
|
## Requirements
|
|
253
141
|
|
|
254
142
|
- Node.js >= 18.0.0
|
|
255
|
-
- Claude Code
|
|
143
|
+
- Claude Code/CLI
|
|
144
|
+
|
|
145
|
+
## Links
|
|
146
|
+
|
|
147
|
+
- [genskills.dev](https://genskills.dev) — Homepage
|
|
148
|
+
- [genskills.dev/skills](https://genskills.dev/skills) — Browse all skills
|
|
256
149
|
|
|
257
150
|
## License
|
|
258
151
|
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE3D"}
|
|
@@ -38,6 +38,7 @@ const fs = __importStar(require("fs"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const paths_1 = require("../utils/paths");
|
|
40
40
|
const manifest_1 = require("../utils/manifest");
|
|
41
|
+
const config_loader_1 = require("../utils/config-loader");
|
|
41
42
|
const logger_1 = require("../utils/logger");
|
|
42
43
|
function registerCleanCommand(program) {
|
|
43
44
|
program
|
|
@@ -46,8 +47,11 @@ function registerCleanCommand(program) {
|
|
|
46
47
|
.option("--backups", "Also remove backup directory")
|
|
47
48
|
.action((opts) => {
|
|
48
49
|
const projectRoot = (0, paths_1.findProjectRoot)();
|
|
49
|
-
const
|
|
50
|
-
const
|
|
50
|
+
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
51
|
+
const prefix = config.prefix || "genskills";
|
|
52
|
+
const prefixWithSep = `${prefix}--`;
|
|
53
|
+
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot, config.installPath);
|
|
54
|
+
const manifest = (0, manifest_1.readManifest)(projectRoot, config.installPath);
|
|
51
55
|
logger_1.logger.header("GenSkills — Clean");
|
|
52
56
|
logger_1.logger.br();
|
|
53
57
|
if (!fs.existsSync(skillsDir)) {
|
|
@@ -58,13 +62,13 @@ function registerCleanCommand(program) {
|
|
|
58
62
|
const validSkills = new Set();
|
|
59
63
|
for (const category of (0, paths_1.getCategories)()) {
|
|
60
64
|
for (const skill of (0, paths_1.getSkillsInCategory)(category)) {
|
|
61
|
-
validSkills.add(
|
|
65
|
+
validSkills.add(`${prefixWithSep}${skill}`);
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
// Find installed genskills directories
|
|
65
69
|
const installed = fs
|
|
66
70
|
.readdirSync(skillsDir, { withFileTypes: true })
|
|
67
|
-
.filter((d) => d.isDirectory() && d.name.startsWith(
|
|
71
|
+
.filter((d) => d.isDirectory() && d.name.startsWith(prefixWithSep))
|
|
68
72
|
.map((d) => d.name);
|
|
69
73
|
// Remove orphans (installed but no longer in package)
|
|
70
74
|
let orphanCount = 0;
|
|
@@ -82,11 +86,11 @@ function registerCleanCommand(program) {
|
|
|
82
86
|
}
|
|
83
87
|
else {
|
|
84
88
|
logger_1.logger.success(`Removed ${orphanCount} orphaned skill(s).`);
|
|
85
|
-
(0, manifest_1.writeManifest)(projectRoot, manifest);
|
|
89
|
+
(0, manifest_1.writeManifest)(projectRoot, manifest, config.installPath);
|
|
86
90
|
}
|
|
87
91
|
// Clean backups
|
|
88
92
|
if (opts.backups) {
|
|
89
|
-
const backupDir = (0, paths_1.getBackupDir)(projectRoot);
|
|
93
|
+
const backupDir = (0, paths_1.getBackupDir)(projectRoot, config.installPath);
|
|
90
94
|
if (fs.existsSync(backupDir)) {
|
|
91
95
|
fs.rmSync(backupDir, { recursive: true, force: true });
|
|
92
96
|
logger_1.logger.success("Removed backup directory.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,oDAiEC;AA9ED,uCAAyB;AACzB,2CAA6B;AAC7B,0CAMwB;AACxB,gDAAgE;AAChE,0DAAoD;AACpD,4CAAyC;AAEzC,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,CAAC,IAA2B,EAAE,EAAE;QACtC,MAAM,WAAW,GAAG,IAAA,uBAAe,GAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,0BAAU,EAAC,WAAW,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC;QAC5C,MAAM,aAAa,GAAG,GAAG,MAAM,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/D,eAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACnC,eAAM,CAAC,EAAE,EAAE,CAAC;QAEZ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,eAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAA,qBAAa,GAAE,EAAE,CAAC;YACvC,KAAK,MAAM,KAAK,IAAI,IAAA,2BAAmB,EAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,WAAW,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,SAAS,GAAG,EAAE;aACjB,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEtB,sDAAsD;QACtD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC3C,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,eAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;gBACtC,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,eAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,OAAO,CAAC,WAAW,WAAW,qBAAqB,CAAC,CAAC;YAC5D,IAAA,wBAAa,EAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,eAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +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,
|
|
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,CAsH5D"}
|
|
@@ -48,21 +48,22 @@ function registerDoctorCommand(program) {
|
|
|
48
48
|
.description("Diagnose issues with your genskills installation")
|
|
49
49
|
.action(() => {
|
|
50
50
|
const projectRoot = (0, paths_1.findProjectRoot)();
|
|
51
|
+
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
51
52
|
let issues = 0;
|
|
52
53
|
logger_1.logger.header("GenSkills — Doctor");
|
|
53
54
|
logger_1.logger.br();
|
|
54
55
|
// 1. Check skills directory exists
|
|
55
|
-
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot);
|
|
56
|
+
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot, config.installPath);
|
|
56
57
|
if (!fs.existsSync(skillsDir)) {
|
|
57
|
-
logger_1.logger.error(".claude/skills/ directory does not exist
|
|
58
|
+
logger_1.logger.error(`${config.installPath || ".claude/skills"}/ directory does not exist`);
|
|
58
59
|
logger_1.logger.info("Run `npx genskills install` to create it.");
|
|
59
60
|
issues++;
|
|
60
61
|
}
|
|
61
62
|
else {
|
|
62
|
-
logger_1.logger.success(".claude/skills/ directory exists
|
|
63
|
+
logger_1.logger.success(`${config.installPath || ".claude/skills"}/ directory exists`);
|
|
63
64
|
}
|
|
64
65
|
// 2. Check manifest
|
|
65
|
-
const manifest = (0, manifest_1.readManifest)(projectRoot);
|
|
66
|
+
const manifest = (0, manifest_1.readManifest)(projectRoot, config.installPath);
|
|
66
67
|
const installedSkills = (0, copy_1.getInstalledSkills)(projectRoot);
|
|
67
68
|
if (Object.keys(manifest.skills).length === 0 && installedSkills.length > 0) {
|
|
68
69
|
logger_1.logger.warn("Skills installed but manifest is empty — run `npx genskills install --force`");
|
|
@@ -79,12 +80,12 @@ function registerDoctorCommand(program) {
|
|
|
79
80
|
issues++;
|
|
80
81
|
}
|
|
81
82
|
// 4. Check for checksum drift (user modified installed skills)
|
|
82
|
-
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
83
83
|
const categories = (0, paths_1.getCategories)();
|
|
84
84
|
let driftCount = 0;
|
|
85
|
+
const prefix = config.prefix || "genskills";
|
|
85
86
|
for (const category of categories) {
|
|
86
87
|
for (const skill of (0, paths_1.getSkillsInCategory)(category)) {
|
|
87
|
-
const manifestKey =
|
|
88
|
+
const manifestKey = `${prefix}--${skill}`;
|
|
88
89
|
const entry = manifest.skills[manifestKey];
|
|
89
90
|
if (!entry)
|
|
90
91
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,36 +55,43 @@ function registerInitCommand(program) {
|
|
|
55
55
|
const config = (0, config_loader_1.createDefaultConfig)();
|
|
56
56
|
if (opts.yes) {
|
|
57
57
|
// Use all defaults
|
|
58
|
-
(
|
|
58
|
+
writeConfigWithSchema(configPath, config);
|
|
59
59
|
logger_1.logger.success(`Created ${configPath} with defaults (all skills enabled)`);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
-
// Interactive mode —
|
|
62
|
+
// Interactive mode — prompt user per category
|
|
63
|
+
const inquirerModule = await Promise.resolve().then(() => __importStar(require("inquirer")));
|
|
64
|
+
const inquirer = inquirerModule.default || inquirerModule;
|
|
63
65
|
logger_1.logger.header("GenSkills — Interactive Setup");
|
|
64
66
|
logger_1.logger.br();
|
|
65
|
-
logger_1.logger.info("Select which skill categories to enable:");
|
|
66
|
-
logger_1.logger.br();
|
|
67
67
|
const categories = (0, paths_1.getCategories)();
|
|
68
68
|
for (const category of categories) {
|
|
69
69
|
const skills = (0, paths_1.getSkillsInCategory)(category);
|
|
70
70
|
const formatted = formatCategory(category);
|
|
71
|
-
logger_1.logger.
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
logger_1.logger.dim(` Skills: ${skills.join(", ")}`);
|
|
72
|
+
const answers = await inquirer.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: "confirm",
|
|
75
|
+
name: "enabled",
|
|
76
|
+
message: `Enable ${formatted}? (${skills.length} skills)`,
|
|
77
|
+
default: true,
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
config.categories[category] = answers.enabled;
|
|
74
81
|
}
|
|
75
|
-
logger_1.logger.info("All categories enabled by default.");
|
|
76
|
-
logger_1.logger.info("Edit genskills.config.json to customize.");
|
|
77
82
|
logger_1.logger.br();
|
|
78
|
-
|
|
79
|
-
const configWithSchema = {
|
|
80
|
-
$schema: "./node_modules/genskills/schemas/genskills-config.schema.json",
|
|
81
|
-
...config,
|
|
82
|
-
};
|
|
83
|
-
fs.writeFileSync(configPath, JSON.stringify(configWithSchema, null, 2), "utf-8");
|
|
83
|
+
writeConfigWithSchema(configPath, config);
|
|
84
84
|
logger_1.logger.success(`Created: ${configPath}`);
|
|
85
85
|
logger_1.logger.info("Run `npx genskills install` to apply changes.");
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
|
+
function writeConfigWithSchema(configPath, config) {
|
|
89
|
+
const configWithSchema = {
|
|
90
|
+
$schema: "./node_modules/genskills/schemas/genskills-config.schema.json",
|
|
91
|
+
...config,
|
|
92
|
+
};
|
|
93
|
+
fs.writeFileSync(configPath, JSON.stringify(configWithSchema, null, 2), "utf-8");
|
|
94
|
+
}
|
|
88
95
|
function formatCategory(name) {
|
|
89
96
|
return name
|
|
90
97
|
.split("-")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kDAqDC;AA3DD,uCAAyB;AACzB,0CAAqF;AACrF,0CAA+C;AAC/C,0DAA0F;AAC1F,4CAAyC;AAEzC,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,WAAW,EAAE,gCAAgC,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,IAAA,uBAAe,GAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,WAAW,CAAC,CAAC;QAE9C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,eAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,mCAAmB,GAAE,CAAC;QAErC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,mBAAmB;YACnB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/copy.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,aAAa,CAsDf;AA6DD;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/copy.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,aAAa,CAsDf;AA6DD;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAgB3E;AAmBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAehE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhE"}
|
package/dist/cli/utils/copy.js
CHANGED
|
@@ -47,8 +47,8 @@ const manifest_1 = require("./manifest");
|
|
|
47
47
|
*/
|
|
48
48
|
function installSkills(projectRoot, options = {}) {
|
|
49
49
|
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
50
|
-
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot);
|
|
51
|
-
const manifest = (0, manifest_1.readManifest)(projectRoot);
|
|
50
|
+
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot, config.installPath);
|
|
51
|
+
const manifest = (0, manifest_1.readManifest)(projectRoot, config.installPath);
|
|
52
52
|
const result = {
|
|
53
53
|
installed: [],
|
|
54
54
|
updated: [],
|
|
@@ -87,7 +87,7 @@ function installSkills(projectRoot, options = {}) {
|
|
|
87
87
|
// Update manifest
|
|
88
88
|
manifest.packageVersion = (0, manifest_1.getPackageVersion)();
|
|
89
89
|
manifest.installedAt = new Date().toISOString();
|
|
90
|
-
(0, manifest_1.writeManifest)(projectRoot, manifest);
|
|
90
|
+
(0, manifest_1.writeManifest)(projectRoot, manifest, config.installPath);
|
|
91
91
|
return result;
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
@@ -95,8 +95,8 @@ function installSkills(projectRoot, options = {}) {
|
|
|
95
95
|
*/
|
|
96
96
|
function installSingleSkill(projectRoot, category, skillName, config, manifest, force) {
|
|
97
97
|
const sourcePath = (0, paths_1.getSkillSourcePath)(category, skillName);
|
|
98
|
-
const targetDir = path.join((0, paths_1.getSkillsDir)(projectRoot), (0, paths_1.namespacedSkillDir)(skillName));
|
|
99
|
-
const manifestKey = (0, paths_1.namespacedSkillDir)(skillName);
|
|
98
|
+
const targetDir = path.join((0, paths_1.getSkillsDir)(projectRoot, config.installPath), (0, paths_1.namespacedSkillDir)(skillName, config.prefix));
|
|
99
|
+
const manifestKey = (0, paths_1.namespacedSkillDir)(skillName, config.prefix);
|
|
100
100
|
// Compute source checksum
|
|
101
101
|
const sourceChecksum = (0, manifest_1.computeChecksum)(sourcePath);
|
|
102
102
|
// Check if already installed with same checksum
|
|
@@ -107,7 +107,7 @@ function installSingleSkill(projectRoot, category, skillName, config, manifest,
|
|
|
107
107
|
const isUpdate = existing !== undefined;
|
|
108
108
|
// Backup existing if updating
|
|
109
109
|
if (isUpdate && fs.existsSync(targetDir)) {
|
|
110
|
-
backupSkill(projectRoot, skillName, targetDir);
|
|
110
|
+
backupSkill(projectRoot, skillName, targetDir, config.installPath);
|
|
111
111
|
}
|
|
112
112
|
// Copy skill directory
|
|
113
113
|
copyDirRecursive(sourcePath, targetDir);
|
|
@@ -130,21 +130,22 @@ function installSingleSkill(projectRoot, category, skillName, config, manifest,
|
|
|
130
130
|
* Remove a skill from the project.
|
|
131
131
|
*/
|
|
132
132
|
function removeSkill(projectRoot, skillName) {
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
const
|
|
133
|
+
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
134
|
+
const targetDir = path.join((0, paths_1.getSkillsDir)(projectRoot, config.installPath), (0, paths_1.namespacedSkillDir)(skillName, config.prefix));
|
|
135
|
+
const manifest = (0, manifest_1.readManifest)(projectRoot, config.installPath);
|
|
136
|
+
const manifestKey = (0, paths_1.namespacedSkillDir)(skillName, config.prefix);
|
|
136
137
|
if (!fs.existsSync(targetDir))
|
|
137
138
|
return false;
|
|
138
139
|
fs.rmSync(targetDir, { recursive: true, force: true });
|
|
139
140
|
delete manifest.skills[manifestKey];
|
|
140
|
-
(0, manifest_1.writeManifest)(projectRoot, manifest);
|
|
141
|
+
(0, manifest_1.writeManifest)(projectRoot, manifest, config.installPath);
|
|
141
142
|
return true;
|
|
142
143
|
}
|
|
143
144
|
/**
|
|
144
145
|
* Backup a skill directory before overwriting.
|
|
145
146
|
*/
|
|
146
|
-
function backupSkill(projectRoot, skillName, sourceDir) {
|
|
147
|
-
const backupDir = (0, paths_1.getBackupDir)(projectRoot);
|
|
147
|
+
function backupSkill(projectRoot, skillName, sourceDir, installPath) {
|
|
148
|
+
const backupDir = (0, paths_1.getBackupDir)(projectRoot, installPath);
|
|
148
149
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
149
150
|
const backupPath = path.join(backupDir, `${skillName}-${timestamp}`);
|
|
150
151
|
fs.mkdirSync(backupPath, { recursive: true });
|
|
@@ -171,12 +172,15 @@ function copyDirRecursive(src, dest) {
|
|
|
171
172
|
* Get all installed genskills skill names.
|
|
172
173
|
*/
|
|
173
174
|
function getInstalledSkills(projectRoot) {
|
|
174
|
-
const
|
|
175
|
+
const config = (0, config_loader_1.loadConfig)(projectRoot);
|
|
176
|
+
const prefix = config.prefix || "genskills";
|
|
177
|
+
const skillsDir = (0, paths_1.getSkillsDir)(projectRoot, config.installPath);
|
|
175
178
|
if (!fs.existsSync(skillsDir))
|
|
176
179
|
return [];
|
|
180
|
+
const prefixWithSep = `${prefix}--`;
|
|
177
181
|
return fs
|
|
178
182
|
.readdirSync(skillsDir, { withFileTypes: true })
|
|
179
|
-
.filter((d) => d.isDirectory() && d.name.startsWith(
|
|
180
|
-
.map((d) => d.name.
|
|
183
|
+
.filter((d) => d.isDirectory() && d.name.startsWith(prefixWithSep))
|
|
184
|
+
.map((d) => d.name.substring(prefixWithSep.length));
|
|
181
185
|
}
|
|
182
186
|
//# sourceMappingURL=copy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/cli/utils/copy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,sCAyDC;AAgED,
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/cli/utils/copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,11 @@ export interface GenSkillsManifest {
|
|
|
13
13
|
/**
|
|
14
14
|
* Read the manifest file, or return a fresh empty manifest.
|
|
15
15
|
*/
|
|
16
|
-
export declare function readManifest(projectRoot: string): GenSkillsManifest;
|
|
16
|
+
export declare function readManifest(projectRoot: string, installPath?: string): GenSkillsManifest;
|
|
17
17
|
/**
|
|
18
18
|
* Write the manifest file.
|
|
19
19
|
*/
|
|
20
|
-
export declare function writeManifest(projectRoot: string, manifest: GenSkillsManifest): void;
|
|
20
|
+
export declare function writeManifest(projectRoot: string, manifest: GenSkillsManifest, installPath?: string): void;
|
|
21
21
|
/**
|
|
22
22
|
* Compute a SHA-256 checksum for a skill directory.
|
|
23
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAczF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxD;AAuBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C"}
|
|
@@ -44,8 +44,8 @@ const paths_1 = require("./paths");
|
|
|
44
44
|
/**
|
|
45
45
|
* Read the manifest file, or return a fresh empty manifest.
|
|
46
46
|
*/
|
|
47
|
-
function readManifest(projectRoot) {
|
|
48
|
-
const manifestPath = (0, paths_1.getManifestPath)(projectRoot);
|
|
47
|
+
function readManifest(projectRoot, installPath) {
|
|
48
|
+
const manifestPath = (0, paths_1.getManifestPath)(projectRoot, installPath);
|
|
49
49
|
if (fs.existsSync(manifestPath)) {
|
|
50
50
|
try {
|
|
51
51
|
return JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
@@ -63,8 +63,8 @@ function readManifest(projectRoot) {
|
|
|
63
63
|
/**
|
|
64
64
|
* Write the manifest file.
|
|
65
65
|
*/
|
|
66
|
-
function writeManifest(projectRoot, manifest) {
|
|
67
|
-
const manifestPath = (0, paths_1.getManifestPath)(projectRoot);
|
|
66
|
+
function writeManifest(projectRoot, manifest, installPath) {
|
|
67
|
+
const manifestPath = (0, paths_1.getManifestPath)(projectRoot, installPath);
|
|
68
68
|
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
69
69
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
|
|
70
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/cli/utils/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,oCAcC;AAKD,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/cli/utils/manifest.ts"],"names":[],"mappings":"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"}
|