@kongyo2/kongyo-cli 0.1.1 → 0.1.3
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/dist/app.d.ts.map +1 -1
- package/dist/app.js +98 -2
- package/dist/app.js.map +1 -1
- package/dist/components/MainMenu.d.ts +8 -0
- package/dist/components/MainMenu.d.ts.map +1 -0
- package/dist/components/MainMenu.js +20 -0
- package/dist/components/MainMenu.js.map +1 -0
- package/dist/components/SkillsConfirm.d.ts +10 -0
- package/dist/components/SkillsConfirm.d.ts.map +1 -0
- package/dist/components/SkillsConfirm.js +8 -0
- package/dist/components/SkillsConfirm.js.map +1 -0
- package/dist/components/SkillsDownload.d.ts +15 -0
- package/dist/components/SkillsDownload.d.ts.map +1 -0
- package/dist/components/SkillsDownload.js +40 -0
- package/dist/components/SkillsDownload.js.map +1 -0
- package/dist/components/SkillsFetch.d.ts +10 -0
- package/dist/components/SkillsFetch.d.ts.map +1 -0
- package/dist/components/SkillsFetch.js +35 -0
- package/dist/components/SkillsFetch.js.map +1 -0
- package/dist/components/SkillsRepo.d.ts +8 -0
- package/dist/components/SkillsRepo.d.ts.map +1 -0
- package/dist/components/SkillsRepo.js +26 -0
- package/dist/components/SkillsRepo.js.map +1 -0
- package/dist/components/SkillsSelect.d.ts +11 -0
- package/dist/components/SkillsSelect.d.ts.map +1 -0
- package/dist/components/SkillsSelect.js +60 -0
- package/dist/components/SkillsSelect.js.map +1 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/skills.d.ts +32 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +465 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/types.d.ts +50 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +16 -0
- package/dist/lib/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { Result, ok, err } from "neverthrow";
|
|
4
|
+
/**
|
|
5
|
+
* Parse GitHub URL in various formats
|
|
6
|
+
* Supports:
|
|
7
|
+
* - https://github.com/owner/repo
|
|
8
|
+
* - https://github.com/owner/repo/tree/branch
|
|
9
|
+
* - https://github.com/owner/repo/tree/branch/path/to/skills
|
|
10
|
+
*/
|
|
11
|
+
function parseGitHubUrl(url) {
|
|
12
|
+
const patterns = [
|
|
13
|
+
/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)\/(.+)$/,
|
|
14
|
+
/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)\/?$/,
|
|
15
|
+
/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/?$/,
|
|
16
|
+
];
|
|
17
|
+
for (const pattern of patterns) {
|
|
18
|
+
const match = url.match(pattern);
|
|
19
|
+
if (match) {
|
|
20
|
+
const owner = match[1];
|
|
21
|
+
const repo = match[2];
|
|
22
|
+
if (owner && repo) {
|
|
23
|
+
return {
|
|
24
|
+
owner,
|
|
25
|
+
repo,
|
|
26
|
+
branch: match[3] ?? "main",
|
|
27
|
+
path: match[4] ?? "",
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Fetch directory contents from GitHub API
|
|
36
|
+
*/
|
|
37
|
+
async function fetchGitHubContents(owner, repo, contentPath) {
|
|
38
|
+
const apiUrl = `https://api.github.com/repos/${owner}/${repo}/contents/${contentPath}`;
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(apiUrl, {
|
|
41
|
+
headers: {
|
|
42
|
+
Accept: "application/vnd.github.v3+json",
|
|
43
|
+
"User-Agent": "kongyo-cli",
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
if (response.status === 404) {
|
|
48
|
+
return err({ type: "fetch_error", message: `Path not found: ${contentPath || "(root)"}` });
|
|
49
|
+
}
|
|
50
|
+
if (response.status === 403) {
|
|
51
|
+
return err({ type: "fetch_error", message: "GitHub API rate limit exceeded. Try again later." });
|
|
52
|
+
}
|
|
53
|
+
return err({ type: "network_error", message: `HTTP ${response.status}: ${response.statusText}` });
|
|
54
|
+
}
|
|
55
|
+
const data = await response.json();
|
|
56
|
+
// Handle single file response
|
|
57
|
+
if (!Array.isArray(data)) {
|
|
58
|
+
return ok([data]);
|
|
59
|
+
}
|
|
60
|
+
return ok(data);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return err({
|
|
64
|
+
type: "network_error",
|
|
65
|
+
message: error instanceof Error ? error.message : String(error),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Fetch raw file content from GitHub
|
|
71
|
+
*/
|
|
72
|
+
async function fetchRawContent(owner, repo, branch, filePath) {
|
|
73
|
+
const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${filePath}`;
|
|
74
|
+
try {
|
|
75
|
+
const response = await fetch(rawUrl, {
|
|
76
|
+
headers: { "User-Agent": "kongyo-cli" },
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
return err({ type: "fetch_error", message: `Failed to fetch: ${filePath}` });
|
|
80
|
+
}
|
|
81
|
+
return ok(await response.text());
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return err({
|
|
85
|
+
type: "network_error",
|
|
86
|
+
message: error instanceof Error ? error.message : String(error),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse YAML frontmatter from SKILL.md
|
|
92
|
+
* Supports multi-line quoted descriptions per Agent Skills spec
|
|
93
|
+
*
|
|
94
|
+
* Required fields: name, description
|
|
95
|
+
* Optional fields: license, compatibility, metadata, allowed-tools
|
|
96
|
+
*/
|
|
97
|
+
function parseSkillMd(content) {
|
|
98
|
+
// Extract YAML frontmatter
|
|
99
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
100
|
+
if (!frontmatterMatch?.[1]) {
|
|
101
|
+
// Fallback: extract title from first heading
|
|
102
|
+
const headingMatch = content.match(/^#\s+(.+)$/m);
|
|
103
|
+
if (headingMatch?.[1]) {
|
|
104
|
+
return {
|
|
105
|
+
name: headingMatch[1].trim(),
|
|
106
|
+
description: "Skill from repository",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const frontmatter = frontmatterMatch[1];
|
|
112
|
+
// Parse name (required)
|
|
113
|
+
const nameMatch = frontmatter.match(/^name:\s*["']?([^"'\n]+)["']?$/m);
|
|
114
|
+
const name = nameMatch?.[1]?.trim();
|
|
115
|
+
// Parse description (required) - supports both single-line and multi-line quoted strings
|
|
116
|
+
let description;
|
|
117
|
+
// Try multi-line quoted description first: description: "line1\nline2"
|
|
118
|
+
const multiLineMatch = frontmatter.match(/^description:\s*["']([\s\S]*?)["']\s*$/m);
|
|
119
|
+
if (multiLineMatch?.[1]) {
|
|
120
|
+
description = multiLineMatch[1].trim();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Try single-line unquoted
|
|
124
|
+
const singleLineMatch = frontmatter.match(/^description:\s*(.+)$/m);
|
|
125
|
+
if (singleLineMatch?.[1]) {
|
|
126
|
+
description = singleLineMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Parse optional license
|
|
130
|
+
const licenseMatch = frontmatter.match(/^license:\s*["']?([^"'\n]+)["']?$/m);
|
|
131
|
+
const license = licenseMatch?.[1]?.trim();
|
|
132
|
+
// Parse optional compatibility
|
|
133
|
+
const compatibilityMatch = frontmatter.match(/^compatibility:\s*["']?([^"'\n]+)["']?$/m);
|
|
134
|
+
const compatibility = compatibilityMatch?.[1]?.trim();
|
|
135
|
+
// Parse optional allowed-tools (space-separated list)
|
|
136
|
+
const allowedToolsMatch = frontmatter.match(/^allowed-tools:\s*(.+)$/m);
|
|
137
|
+
const allowedTools = allowedToolsMatch?.[1]?.trim().split(/\s+/);
|
|
138
|
+
return {
|
|
139
|
+
name: name ?? "Unknown",
|
|
140
|
+
description: description ?? "No description",
|
|
141
|
+
license,
|
|
142
|
+
compatibility,
|
|
143
|
+
allowedTools,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if a directory contains SKILL.md (case-insensitive)
|
|
148
|
+
*/
|
|
149
|
+
function hasSkillMd(contents) {
|
|
150
|
+
return contents.find((item) => item.type === "file" && item.name.toLowerCase() === "skill.md");
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Recursively discover skills in a repository
|
|
154
|
+
*
|
|
155
|
+
* Strategy (based on Agent Skills spec):
|
|
156
|
+
* 1. Look for "skills/" directory and search within it
|
|
157
|
+
* 2. Look for directories containing SKILL.md at current level
|
|
158
|
+
* 3. Recursively search in subdirectories (excluding common non-skill dirs)
|
|
159
|
+
*/
|
|
160
|
+
async function discoverSkillsRecursive(owner, repo, branch, basePath, repoUrl, depth = 0, maxDepth = 3) {
|
|
161
|
+
if (depth > maxDepth)
|
|
162
|
+
return [];
|
|
163
|
+
const contentsResult = await fetchGitHubContents(owner, repo, basePath);
|
|
164
|
+
if (contentsResult.isErr())
|
|
165
|
+
return [];
|
|
166
|
+
const contents = contentsResult.value;
|
|
167
|
+
const skills = [];
|
|
168
|
+
// Non-skill directories to skip
|
|
169
|
+
const skipDirs = new Set([
|
|
170
|
+
"node_modules", ".git", ".github", "dist", "build",
|
|
171
|
+
"test", "tests", "docs", "spec", "template", ".claude-plugin",
|
|
172
|
+
"__pycache__", ".venv", "venv", "coverage"
|
|
173
|
+
]);
|
|
174
|
+
// Priority 1: Check if we're at a directory with SKILL.md
|
|
175
|
+
const skillMd = hasSkillMd(contents);
|
|
176
|
+
if (skillMd) {
|
|
177
|
+
const contentResult = await fetchRawContent(owner, repo, branch, skillMd.path);
|
|
178
|
+
const metadata = contentResult.isOk() ? parseSkillMd(contentResult.value) : null;
|
|
179
|
+
// Extract directory name as skill ID
|
|
180
|
+
const dirName = basePath.split("/").pop() ?? basePath;
|
|
181
|
+
skills.push({
|
|
182
|
+
id: metadata?.name ?? dirName,
|
|
183
|
+
name: metadata?.name ?? dirName.replace(/-/g, " "),
|
|
184
|
+
description: metadata?.description ?? `Skill: ${dirName}`,
|
|
185
|
+
repoUrl,
|
|
186
|
+
path: basePath,
|
|
187
|
+
selected: false,
|
|
188
|
+
});
|
|
189
|
+
// Don't recurse into skill directories
|
|
190
|
+
return skills;
|
|
191
|
+
}
|
|
192
|
+
// Get directories to explore
|
|
193
|
+
const directories = contents.filter((item) => item.type === "dir" && !skipDirs.has(item.name.toLowerCase()));
|
|
194
|
+
// Priority 2: Check for "skills" directory
|
|
195
|
+
const skillsDir = directories.find((d) => d.name.toLowerCase() === "skills");
|
|
196
|
+
if (skillsDir) {
|
|
197
|
+
// Search within skills directory
|
|
198
|
+
const skillsDirContents = await fetchGitHubContents(owner, repo, skillsDir.path);
|
|
199
|
+
if (skillsDirContents.isOk()) {
|
|
200
|
+
const skillSubDirs = skillsDirContents.value.filter((item) => item.type === "dir" && !skipDirs.has(item.name.toLowerCase()));
|
|
201
|
+
// Check each subdirectory for SKILL.md
|
|
202
|
+
for (const subDir of skillSubDirs) {
|
|
203
|
+
const subDirContents = await fetchGitHubContents(owner, repo, subDir.path);
|
|
204
|
+
if (subDirContents.isOk()) {
|
|
205
|
+
const subSkillMd = hasSkillMd(subDirContents.value);
|
|
206
|
+
if (subSkillMd) {
|
|
207
|
+
const contentResult = await fetchRawContent(owner, repo, branch, subSkillMd.path);
|
|
208
|
+
const metadata = contentResult.isOk() ? parseSkillMd(contentResult.value) : null;
|
|
209
|
+
skills.push({
|
|
210
|
+
id: metadata?.name ?? subDir.name,
|
|
211
|
+
name: metadata?.name ?? subDir.name.replace(/-/g, " "),
|
|
212
|
+
description: metadata?.description ?? `Skill: ${subDir.name}`,
|
|
213
|
+
repoUrl,
|
|
214
|
+
path: subDir.path,
|
|
215
|
+
selected: false,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// If we found skills in skills/ directory, don't search elsewhere
|
|
222
|
+
if (skills.length > 0)
|
|
223
|
+
return skills;
|
|
224
|
+
}
|
|
225
|
+
// Priority 3: Check each directory at current level for SKILL.md
|
|
226
|
+
for (const dir of directories) {
|
|
227
|
+
if (dir.name.toLowerCase() === "skills")
|
|
228
|
+
continue; // Already handled
|
|
229
|
+
const dirContents = await fetchGitHubContents(owner, repo, dir.path);
|
|
230
|
+
if (dirContents.isOk()) {
|
|
231
|
+
const dirSkillMd = hasSkillMd(dirContents.value);
|
|
232
|
+
if (dirSkillMd) {
|
|
233
|
+
const contentResult = await fetchRawContent(owner, repo, branch, dirSkillMd.path);
|
|
234
|
+
const metadata = contentResult.isOk() ? parseSkillMd(contentResult.value) : null;
|
|
235
|
+
skills.push({
|
|
236
|
+
id: metadata?.name ?? dir.name,
|
|
237
|
+
name: metadata?.name ?? dir.name.replace(/-/g, " "),
|
|
238
|
+
description: metadata?.description ?? `Skill: ${dir.name}`,
|
|
239
|
+
repoUrl,
|
|
240
|
+
path: dir.path,
|
|
241
|
+
selected: false,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Recurse into directory
|
|
246
|
+
const subSkills = await discoverSkillsRecursive(owner, repo, branch, dir.path, repoUrl, depth + 1, maxDepth);
|
|
247
|
+
skills.push(...subSkills);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Priority 4: If nothing found yet, check for .md files (legacy support)
|
|
252
|
+
if (skills.length === 0 && depth === 0) {
|
|
253
|
+
const mdFiles = contents.filter((item) => item.type === "file" &&
|
|
254
|
+
item.name.toLowerCase().endsWith(".md") &&
|
|
255
|
+
!["readme.md", "changelog.md", "contributing.md", "license.md"].includes(item.name.toLowerCase()));
|
|
256
|
+
for (const file of mdFiles) {
|
|
257
|
+
const contentResult = await fetchRawContent(owner, repo, branch, file.path);
|
|
258
|
+
const metadata = contentResult.isOk() ? parseSkillMd(contentResult.value) : null;
|
|
259
|
+
// Only include if it has proper frontmatter
|
|
260
|
+
if (metadata && metadata.name !== "Unknown") {
|
|
261
|
+
skills.push({
|
|
262
|
+
id: metadata.name,
|
|
263
|
+
name: metadata.name,
|
|
264
|
+
description: metadata.description,
|
|
265
|
+
repoUrl,
|
|
266
|
+
path: file.path,
|
|
267
|
+
selected: false,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return skills;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Fetch skills from a GitHub repository
|
|
276
|
+
*/
|
|
277
|
+
export async function fetchSkillsFromRepo(repoUrl) {
|
|
278
|
+
const parsed = parseGitHubUrl(repoUrl);
|
|
279
|
+
if (!parsed) {
|
|
280
|
+
return err({ type: "parse_error", message: "Invalid GitHub URL format" });
|
|
281
|
+
}
|
|
282
|
+
const { owner, repo, branch, path: basePath } = parsed;
|
|
283
|
+
const skills = await discoverSkillsRecursive(owner, repo, branch, basePath, repoUrl);
|
|
284
|
+
if (skills.length === 0) {
|
|
285
|
+
return err({ type: "fetch_error", message: "No skills found in this repository. Skills require a SKILL.md file with name and description frontmatter." });
|
|
286
|
+
}
|
|
287
|
+
return ok(skills);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Recursively get all files in a directory
|
|
291
|
+
*/
|
|
292
|
+
async function getAllFilesInDirectory(owner, repo, dirPath) {
|
|
293
|
+
const files = [];
|
|
294
|
+
const contentsResult = await fetchGitHubContents(owner, repo, dirPath);
|
|
295
|
+
if (contentsResult.isErr()) {
|
|
296
|
+
return err(contentsResult.error);
|
|
297
|
+
}
|
|
298
|
+
for (const item of contentsResult.value) {
|
|
299
|
+
if (item.type === "file") {
|
|
300
|
+
files.push({ path: item.path });
|
|
301
|
+
}
|
|
302
|
+
else if (item.type === "dir") {
|
|
303
|
+
// Recursively get files in subdirectory
|
|
304
|
+
const subResult = await getAllFilesInDirectory(owner, repo, item.path);
|
|
305
|
+
if (subResult.isOk()) {
|
|
306
|
+
files.push(...subResult.value);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return ok(files);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Download skill content (SKILL.md and optionally related files)
|
|
314
|
+
*/
|
|
315
|
+
export async function downloadSkillContent(skill) {
|
|
316
|
+
const parsed = parseGitHubUrl(skill.repoUrl);
|
|
317
|
+
if (!parsed) {
|
|
318
|
+
return err({ type: "download_error", skillName: skill.name, message: "Invalid repository URL" });
|
|
319
|
+
}
|
|
320
|
+
const { owner, repo, branch } = parsed;
|
|
321
|
+
// Check if path points to a file or directory
|
|
322
|
+
const contentsResult = await fetchGitHubContents(owner, repo, skill.path);
|
|
323
|
+
if (contentsResult.isErr()) {
|
|
324
|
+
return err({ type: "download_error", skillName: skill.name, message: contentsResult.error.message });
|
|
325
|
+
}
|
|
326
|
+
const contents = contentsResult.value;
|
|
327
|
+
// If it's a single file
|
|
328
|
+
if (contents.length === 1 && contents[0]?.type === "file") {
|
|
329
|
+
return fetchRawContent(owner, repo, branch, skill.path);
|
|
330
|
+
}
|
|
331
|
+
// If it's a directory, look for SKILL.md first
|
|
332
|
+
const skillMd = hasSkillMd(contents);
|
|
333
|
+
if (skillMd) {
|
|
334
|
+
return fetchRawContent(owner, repo, branch, skillMd.path);
|
|
335
|
+
}
|
|
336
|
+
// Try README.md as fallback
|
|
337
|
+
const readme = contents.find((item) => item.type === "file" && item.name.toLowerCase() === "readme.md");
|
|
338
|
+
if (readme) {
|
|
339
|
+
return fetchRawContent(owner, repo, branch, readme.path);
|
|
340
|
+
}
|
|
341
|
+
// Get any .md file
|
|
342
|
+
const anyMd = contents.find((item) => item.type === "file" && item.name.toLowerCase().endsWith(".md"));
|
|
343
|
+
if (anyMd) {
|
|
344
|
+
return fetchRawContent(owner, repo, branch, anyMd.path);
|
|
345
|
+
}
|
|
346
|
+
return err({ type: "download_error", skillName: skill.name, message: "No skill content found" });
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Download the entire skill directory including all resources
|
|
350
|
+
* Returns a map of relative paths to content
|
|
351
|
+
*/
|
|
352
|
+
export async function downloadSkillDirectory(skill) {
|
|
353
|
+
const parsed = parseGitHubUrl(skill.repoUrl);
|
|
354
|
+
if (!parsed) {
|
|
355
|
+
return err({ type: "download_error", skillName: skill.name, message: "Invalid repository URL" });
|
|
356
|
+
}
|
|
357
|
+
const { owner, repo, branch } = parsed;
|
|
358
|
+
const filesMap = new Map();
|
|
359
|
+
// Get all files in the skill directory
|
|
360
|
+
const filesResult = await getAllFilesInDirectory(owner, repo, skill.path);
|
|
361
|
+
if (filesResult.isErr()) {
|
|
362
|
+
return err({ type: "download_error", skillName: skill.name, message: filesResult.error.message });
|
|
363
|
+
}
|
|
364
|
+
// Download each file
|
|
365
|
+
for (const file of filesResult.value) {
|
|
366
|
+
const contentResult = await fetchRawContent(owner, repo, branch, file.path);
|
|
367
|
+
if (contentResult.isOk()) {
|
|
368
|
+
// Store with relative path from skill root
|
|
369
|
+
const relativePath = file.path.replace(skill.path + "/", "").replace(skill.path, "");
|
|
370
|
+
filesMap.set(relativePath || path.basename(file.path), contentResult.value);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (filesMap.size === 0) {
|
|
374
|
+
return err({ type: "download_error", skillName: skill.name, message: "No files found in skill directory" });
|
|
375
|
+
}
|
|
376
|
+
return ok(filesMap);
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Sanitize skill name for use as filename
|
|
380
|
+
* Per Agent Skills spec: lowercase, alphanumeric and hyphens only
|
|
381
|
+
*/
|
|
382
|
+
function sanitizeSkillName(name) {
|
|
383
|
+
return name
|
|
384
|
+
.toLowerCase()
|
|
385
|
+
.replace(/[^a-z0-9-]/g, "-")
|
|
386
|
+
.replace(/-+/g, "-")
|
|
387
|
+
.replace(/^-|-$/g, "");
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Save skill content to a single file
|
|
391
|
+
*/
|
|
392
|
+
export function saveSkillToFile(skillName, content) {
|
|
393
|
+
try {
|
|
394
|
+
const cwd = process.cwd();
|
|
395
|
+
const skillsDir = path.join(cwd, ".claude", "skills");
|
|
396
|
+
// Create directories if they don't exist
|
|
397
|
+
if (!fs.existsSync(skillsDir)) {
|
|
398
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
399
|
+
}
|
|
400
|
+
const safeSkillName = sanitizeSkillName(skillName);
|
|
401
|
+
const filePath = path.join(skillsDir, `${safeSkillName}.md`);
|
|
402
|
+
fs.writeFileSync(filePath, content, "utf-8");
|
|
403
|
+
return ok(filePath);
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
return err({
|
|
407
|
+
type: "download_error",
|
|
408
|
+
skillName,
|
|
409
|
+
message: error instanceof Error ? error.message : String(error),
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Save skill as a full directory with all resources
|
|
415
|
+
*/
|
|
416
|
+
export function saveSkillDirectory(skillName, files) {
|
|
417
|
+
try {
|
|
418
|
+
const cwd = process.cwd();
|
|
419
|
+
const safeSkillName = sanitizeSkillName(skillName);
|
|
420
|
+
const skillDir = path.join(cwd, ".claude", "skills", safeSkillName);
|
|
421
|
+
// Create skill directory
|
|
422
|
+
if (!fs.existsSync(skillDir)) {
|
|
423
|
+
fs.mkdirSync(skillDir, { recursive: true });
|
|
424
|
+
}
|
|
425
|
+
// Write each file
|
|
426
|
+
for (const [relativePath, content] of files) {
|
|
427
|
+
const filePath = path.join(skillDir, relativePath);
|
|
428
|
+
const fileDir = path.dirname(filePath);
|
|
429
|
+
// Create subdirectories if needed
|
|
430
|
+
if (!fs.existsSync(fileDir)) {
|
|
431
|
+
fs.mkdirSync(fileDir, { recursive: true });
|
|
432
|
+
}
|
|
433
|
+
fs.writeFileSync(filePath, content, "utf-8");
|
|
434
|
+
}
|
|
435
|
+
return ok(skillDir);
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
return err({
|
|
439
|
+
type: "download_error",
|
|
440
|
+
skillName,
|
|
441
|
+
message: error instanceof Error ? error.message : String(error),
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Download and save skill (single file mode)
|
|
447
|
+
*/
|
|
448
|
+
export async function downloadAndSaveSkill(skill) {
|
|
449
|
+
const contentResult = await downloadSkillContent(skill);
|
|
450
|
+
if (contentResult.isErr()) {
|
|
451
|
+
return err(contentResult.error);
|
|
452
|
+
}
|
|
453
|
+
return saveSkillToFile(skill.id, contentResult.value);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Download and save skill with all resources (directory mode)
|
|
457
|
+
*/
|
|
458
|
+
export async function downloadAndSaveSkillWithResources(skill) {
|
|
459
|
+
const filesResult = await downloadSkillDirectory(skill);
|
|
460
|
+
if (filesResult.isErr()) {
|
|
461
|
+
return err(filesResult.error);
|
|
462
|
+
}
|
|
463
|
+
return saveSkillDirectory(skill.id, filesResult.value);
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -11,8 +11,28 @@ export declare const PromptItemSchema: z.ZodObject<{
|
|
|
11
11
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
12
12
|
}, z.core.$strip>;
|
|
13
13
|
export type PromptItem = z.infer<typeof PromptItemSchema>;
|
|
14
|
+
export declare const SkillItemSchema: z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
description: z.ZodString;
|
|
18
|
+
repoUrl: z.ZodString;
|
|
19
|
+
path: z.ZodString;
|
|
20
|
+
selected: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type SkillItem = z.infer<typeof SkillItemSchema>;
|
|
23
|
+
export declare const SkillMetadataSchema: z.ZodObject<{
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
description: z.ZodString;
|
|
26
|
+
license: z.ZodOptional<z.ZodString>;
|
|
27
|
+
compatibility: z.ZodOptional<z.ZodString>;
|
|
28
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export type SkillMetadata = z.infer<typeof SkillMetadataSchema>;
|
|
31
|
+
export type MainMenuChoice = "prompts" | "skills";
|
|
14
32
|
export type AppState = {
|
|
15
33
|
phase: "logo";
|
|
34
|
+
} | {
|
|
35
|
+
phase: "mainMenu";
|
|
16
36
|
} | {
|
|
17
37
|
phase: "fileSelect";
|
|
18
38
|
} | {
|
|
@@ -22,6 +42,22 @@ export type AppState = {
|
|
|
22
42
|
phase: "summary";
|
|
23
43
|
} | {
|
|
24
44
|
phase: "writing";
|
|
45
|
+
} | {
|
|
46
|
+
phase: "skillsRepo";
|
|
47
|
+
} | {
|
|
48
|
+
phase: "skillsFetching";
|
|
49
|
+
repoUrl: string;
|
|
50
|
+
} | {
|
|
51
|
+
phase: "skillsSelect";
|
|
52
|
+
repoUrl: string;
|
|
53
|
+
skills: SkillItem[];
|
|
54
|
+
} | {
|
|
55
|
+
phase: "skillsConfirm";
|
|
56
|
+
skills: SkillItem[];
|
|
57
|
+
} | {
|
|
58
|
+
phase: "skillsDownloading";
|
|
59
|
+
skills: SkillItem[];
|
|
60
|
+
currentIndex: number;
|
|
25
61
|
} | {
|
|
26
62
|
phase: "done";
|
|
27
63
|
success: boolean;
|
|
@@ -39,4 +75,18 @@ export type FileError = {
|
|
|
39
75
|
type: "permission_denied";
|
|
40
76
|
path: string;
|
|
41
77
|
};
|
|
78
|
+
export type SkillError = {
|
|
79
|
+
type: "fetch_error";
|
|
80
|
+
message: string;
|
|
81
|
+
} | {
|
|
82
|
+
type: "parse_error";
|
|
83
|
+
message: string;
|
|
84
|
+
} | {
|
|
85
|
+
type: "download_error";
|
|
86
|
+
skillName: string;
|
|
87
|
+
message: string;
|
|
88
|
+
} | {
|
|
89
|
+
type: "network_error";
|
|
90
|
+
message: string;
|
|
91
|
+
};
|
|
42
92
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB;;;EAAqC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB;;;EAAqC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,eAAe;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;iBAM9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElD,MAAM,MAAM,QAAQ,GAChB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,GACrB;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GACvB;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GACvB;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,GAC/D;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/dist/lib/types.js
CHANGED
|
@@ -6,4 +6,20 @@ export const PromptItemSchema = z.object({
|
|
|
6
6
|
content: z.string(),
|
|
7
7
|
enabled: z.boolean().default(true),
|
|
8
8
|
});
|
|
9
|
+
// Skill-related types
|
|
10
|
+
export const SkillItemSchema = z.object({
|
|
11
|
+
id: z.string(),
|
|
12
|
+
name: z.string(),
|
|
13
|
+
description: z.string(),
|
|
14
|
+
repoUrl: z.string(),
|
|
15
|
+
path: z.string(),
|
|
16
|
+
selected: z.boolean().default(false),
|
|
17
|
+
});
|
|
18
|
+
export const SkillMetadataSchema = z.object({
|
|
19
|
+
name: z.string(),
|
|
20
|
+
description: z.string(),
|
|
21
|
+
license: z.string().optional(),
|
|
22
|
+
compatibility: z.string().optional(),
|
|
23
|
+
allowedTools: z.array(z.string()).optional(),
|
|
24
|
+
});
|
|
9
25
|
//# sourceMappingURL=types.js.map
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnC,CAAC,CAAC;AAGH,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACrC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC"}
|