add-skill-kit 3.2.1 → 3.2.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/bin/lib/commands/install.js +53 -22
- package/bin/lib/ui.js +16 -10
- package/package.json +1 -1
|
@@ -130,15 +130,34 @@ export async function run(spec) {
|
|
|
130
130
|
if (skillsDir) {
|
|
131
131
|
for (const e of fs.readdirSync(skillsDir)) {
|
|
132
132
|
const sp = path.join(skillsDir, e);
|
|
133
|
-
if (fs.statSync(sp).isDirectory()
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
133
|
+
if (fs.statSync(sp).isDirectory()) {
|
|
134
|
+
// Check if this directory has SKILL.md (top-level skill)
|
|
135
|
+
if (fs.existsSync(path.join(sp, "SKILL.md"))) {
|
|
136
|
+
const m = parseSkillMdFrontmatter(path.join(sp, "SKILL.md"));
|
|
137
|
+
skillsInRepo.push({
|
|
138
|
+
title: e, // Only show folder name
|
|
139
|
+
value: e,
|
|
140
|
+
description: m.description || "",
|
|
141
|
+
selected: singleSkill ? e === singleSkill : true,
|
|
142
|
+
_path: sp
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Also scan nested directories (2 levels deep) for sub-skills
|
|
147
|
+
for (const sub of fs.readdirSync(sp)) {
|
|
148
|
+
const subPath = path.join(sp, sub);
|
|
149
|
+
if (fs.statSync(subPath).isDirectory() && fs.existsSync(path.join(subPath, "SKILL.md"))) {
|
|
150
|
+
const m = parseSkillMdFrontmatter(path.join(subPath, "SKILL.md"));
|
|
151
|
+
const skillName = `${e}/${sub}`; // e.g. "game-development/2d-games"
|
|
152
|
+
skillsInRepo.push({
|
|
153
|
+
title: skillName,
|
|
154
|
+
value: skillName,
|
|
155
|
+
description: m.description || "",
|
|
156
|
+
selected: singleSkill ? skillName === singleSkill : true,
|
|
157
|
+
_path: subPath
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
142
161
|
}
|
|
143
162
|
}
|
|
144
163
|
}
|
|
@@ -168,19 +187,31 @@ export async function run(spec) {
|
|
|
168
187
|
stepLine();
|
|
169
188
|
step(`Auto-selected: ${c.cyan(singleSkill)}`);
|
|
170
189
|
} else {
|
|
171
|
-
// Group skills by category -
|
|
190
|
+
// Group skills by category - 5 main categories (all skills covered, no Other)
|
|
191
|
+
// NOTE: Order matters! Mobile is before Security so mobile-security-coder goes to Mobile
|
|
172
192
|
const CATEGORY_KEYWORDS = {
|
|
173
|
-
"⚙️ Backend & API": [
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
193
|
+
"⚙️ Backend & API": [
|
|
194
|
+
// Core backend
|
|
195
|
+
"backend", "api", "nodejs", "server", "database", "prisma", "mcp", "python", "cache",
|
|
196
|
+
// Architecture & patterns
|
|
197
|
+
"architecture", "pattern", "app-builder", "performance", "profiling",
|
|
198
|
+
// Testing & quality
|
|
199
|
+
"testing", "test", "tdd", "lint", "validate", "debugging", "systematic", "debug",
|
|
200
|
+
"code-review", "code-quality", "e2e", "integration", "webapp", "checklist", "reviewer", "clean",
|
|
201
|
+
// Documentation & tools
|
|
202
|
+
"documentation", "plan", "writing", "geo", "seo", "i18n", "localization", "template",
|
|
203
|
+
// CLI & scripting
|
|
204
|
+
"bash", "linux", "powershell", "windows", "shell", "script",
|
|
205
|
+
// AI & automation
|
|
206
|
+
"agent", "routing", "brainstorm", "behavioral", "intelligent", "parallel", "modes",
|
|
207
|
+
// Other skills
|
|
208
|
+
"typescript", "problem", "workflow", "builder", "conventions", "fundamentals",
|
|
209
|
+
"best-practices", "procedures", "management"
|
|
210
|
+
],
|
|
211
|
+
"🎨 Frontend & UI": ["frontend", "nextjs", "tailwind", "css", "ui", "ux", "visual", "studio", "web-core", "design-system", "react-architect", "react"],
|
|
212
|
+
"🎮 Game Development": ["game", "development", "engine", "unity", "unreal", "godot", "phaser", "game-dev"],
|
|
213
|
+
"📱 Mobile": ["mobile", "first", "developer", "react-native", "flutter", "ios", "android", "swift", "kotlin"],
|
|
214
|
+
"🔒 Security & DevOps": ["security", "vulnerability", "deploy", "git", "docker", "red-team", "governance", "offensive", "gitops", "cicd", "pipeline", "incident", "chaos", "scanner"]
|
|
184
215
|
};
|
|
185
216
|
|
|
186
217
|
function categorizeSkill(skillName) {
|
|
@@ -190,7 +221,7 @@ export async function run(spec) {
|
|
|
190
221
|
return category;
|
|
191
222
|
}
|
|
192
223
|
}
|
|
193
|
-
return "
|
|
224
|
+
return "⚙️ Backend & API"; // Default fallback (no "Other" category)
|
|
194
225
|
}
|
|
195
226
|
|
|
196
227
|
// Group skills by category
|
package/bin/lib/ui.js
CHANGED
|
@@ -12,12 +12,11 @@ export { intro, outro, multiselect, select, confirm, isCancel, cancel, text };
|
|
|
12
12
|
|
|
13
13
|
// --- ASCII Art Banner ---
|
|
14
14
|
const PIKAKIT_BANNER = `
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
|
|
15
|
+
____ _ _ _ ___ _
|
|
16
|
+
| _ \\(_) | ____ _| |/ (_) |_
|
|
17
|
+
| |_) | | |/ / _\` | ' /| | __|
|
|
18
|
+
| __/| | < (_| | . \\| | |_
|
|
19
|
+
|_| |_|_|\\_\\__,_|_|\\_\\_|\\__|
|
|
21
20
|
`;
|
|
22
21
|
|
|
23
22
|
// Custom gradient: white → gray (like vercel style)
|
|
@@ -167,11 +166,18 @@ export function box(message, options = {}) {
|
|
|
167
166
|
* @param {string} [status] - Optional status text
|
|
168
167
|
*/
|
|
169
168
|
export function brandedIntro(version, status = "") {
|
|
170
|
-
//
|
|
171
|
-
|
|
169
|
+
// Split banner and filter to get content lines only
|
|
170
|
+
const bannerLines = PIKAKIT_BANNER.split('\n').filter(line => line.trim() !== '');
|
|
172
171
|
|
|
173
|
-
//
|
|
174
|
-
|
|
172
|
+
// Print all lines except the last with gradient
|
|
173
|
+
for (let i = 0; i < bannerLines.length - 1; i++) {
|
|
174
|
+
console.log(pikaGradient(bannerLines[i]));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Last line: gradient ASCII + dim version (aligned at bottom)
|
|
178
|
+
const lastLine = bannerLines[bannerLines.length - 1];
|
|
179
|
+
console.log(pikaGradient(lastLine) + ` ${c.dim(`v${version}`)}`);
|
|
180
|
+
console.log(''); // Empty line after banner
|
|
175
181
|
|
|
176
182
|
if (status) {
|
|
177
183
|
console.log(`${c.dim(status)}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "add-skill-kit",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
4
4
|
"description": "Enterprise-grade Agent Skill Manager with Antigravity Skills support, Progressive Disclosure detection, and semantic routing validation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "agentskillkit <agentskillkit@gmail.com>",
|