@james-jj-wang/agent-skills-cli 0.1.0 → 0.2.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/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +58 -5
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/info.d.ts +3 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +113 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +71 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +2 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +105 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +2 -1
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +27 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/config.d.ts +36 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +50 -1
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts +13 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +105 -3
- package/dist/git.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +20 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +76 -2
- package/dist/prompts.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,UAAU,SA6JjB,CAAC"}
|
package/dist/commands/add.js
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import pc from "picocolors";
|
|
3
3
|
import { findAgentByFlag, getAllAgentFlags } from "../agents.js";
|
|
4
|
-
import { resolveRepos, fetchAllSkills, installSkill, getInstallDir, cleanupDirs, } from "../git.js";
|
|
5
|
-
import {
|
|
4
|
+
import { resolveRepos, fetchAllSkills, installSkill, getInstallDir, cleanupDirs, getRepoCommitHash, } from "../git.js";
|
|
5
|
+
import { loadProjectConfig, readLockFile, writeLockFile } from "../config.js";
|
|
6
|
+
import { promptSelectAgent, promptSelectSkills, promptSelectTechs, promptSelectVcs } from "../prompts.js";
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
6
9
|
export const addCommand = new Command("add")
|
|
7
10
|
.description("Install skills into your project (or globally with -g)")
|
|
8
11
|
.argument("[skills...]", "Skill names to install (omit for interactive mode)")
|
|
9
12
|
.option("-t, --tool <agent>", `AI agent to install for (${getAllAgentFlags().slice(0, 5).join(", ")}...)`)
|
|
10
13
|
.option("-g, --global", "Install to user-level global directory", false)
|
|
11
14
|
.option("-r, --repo <url>", "Override the source repository URL")
|
|
12
|
-
.action(async (skillNames
|
|
15
|
+
.action(async function (skillNames) {
|
|
16
|
+
const opts = this.optsWithGlobals();
|
|
13
17
|
try {
|
|
18
|
+
const config = loadProjectConfig();
|
|
14
19
|
// 1. Resolve agent
|
|
15
20
|
let agent = opts.tool ? findAgentByFlag(opts.tool) : undefined;
|
|
16
21
|
if (opts.tool && !agent) {
|
|
17
22
|
console.error(pc.red(`Error: Unknown agent "${opts.tool}".`), `\nValid agents: ${getAllAgentFlags().join(", ")}`);
|
|
18
23
|
process.exit(1);
|
|
19
24
|
}
|
|
25
|
+
if (!agent) {
|
|
26
|
+
if (config?.defaultAgent) {
|
|
27
|
+
const defaultAgentObj = findAgentByFlag(config.defaultAgent);
|
|
28
|
+
if (defaultAgentObj)
|
|
29
|
+
agent = defaultAgentObj;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
20
32
|
if (!agent) {
|
|
21
33
|
agent = await promptSelectAgent();
|
|
22
34
|
}
|
|
@@ -56,17 +68,58 @@ export const addCommand = new Command("add")
|
|
|
56
68
|
return;
|
|
57
69
|
}
|
|
58
70
|
}
|
|
59
|
-
// 4.
|
|
71
|
+
// 4. Check if any selected skill requires references
|
|
72
|
+
let needsReferences = false;
|
|
73
|
+
for (const dirName of selectedDirNames) {
|
|
74
|
+
const skill = skills.find((s) => s.dirName === dirName);
|
|
75
|
+
const clonedDir = repoCloneMap.get(skill.repo);
|
|
76
|
+
if (!clonedDir)
|
|
77
|
+
continue;
|
|
78
|
+
const skillMdPath = path.join(clonedDir, "skills", dirName, "SKILL.md");
|
|
79
|
+
if (fs.existsSync(skillMdPath)) {
|
|
80
|
+
const content = fs.readFileSync(skillMdPath, "utf-8");
|
|
81
|
+
if (content.includes("references/") || content.includes("references\\")) {
|
|
82
|
+
needsReferences = true;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// 5. Determine Techs and VCS if needed
|
|
88
|
+
let selectedTechs = config?.techs;
|
|
89
|
+
let selectedVcs = config?.vcs;
|
|
90
|
+
if (needsReferences) {
|
|
91
|
+
const { techs, vcs } = await import("../git.js").then(m => m.scanAvailableReferences(clonedDirs));
|
|
92
|
+
if (!selectedTechs && techs.length > 0) {
|
|
93
|
+
console.log();
|
|
94
|
+
selectedTechs = await promptSelectTechs(techs);
|
|
95
|
+
}
|
|
96
|
+
if (!selectedVcs && vcs.length > 0) {
|
|
97
|
+
console.log();
|
|
98
|
+
selectedVcs = await promptSelectVcs(vcs);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 6. Install each selected skill
|
|
60
102
|
const targetDir = getInstallDir(agent.projectPath, agent.globalPath, opts.global);
|
|
61
103
|
console.log(pc.gray(`\n📁 Installing to: ${targetDir}\n`));
|
|
104
|
+
const lock = readLockFile(targetDir);
|
|
62
105
|
for (const dirName of selectedDirNames) {
|
|
63
106
|
const skill = skills.find((s) => s.dirName === dirName);
|
|
64
107
|
const clonedDir = repoCloneMap.get(skill.repo);
|
|
65
108
|
if (!clonedDir)
|
|
66
109
|
continue;
|
|
67
|
-
installSkill(clonedDir, dirName, targetDir);
|
|
110
|
+
installSkill(clonedDir, dirName, targetDir, selectedTechs, selectedVcs);
|
|
111
|
+
// Record in lockfile
|
|
112
|
+
lock.skills[skill.name] = {
|
|
113
|
+
version: getRepoCommitHash(clonedDir),
|
|
114
|
+
repo: skill.repo,
|
|
115
|
+
installedAt: new Date().toISOString(),
|
|
116
|
+
};
|
|
68
117
|
console.log(pc.green(` ✅ ${skill.name}`));
|
|
118
|
+
if (skill.trigger) {
|
|
119
|
+
console.log(pc.gray(` Trigger: ${skill.trigger}`));
|
|
120
|
+
}
|
|
69
121
|
}
|
|
122
|
+
writeLockFile(targetDir, lock);
|
|
70
123
|
console.log(pc.green(`\n🎉 Successfully installed ${selectedDirNames.length} skill(s) to ${pc.bold(targetDir)}`));
|
|
71
124
|
// 5. Cleanup
|
|
72
125
|
cleanupDirs(clonedDirs);
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EACH,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,SAkFlB,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import pc from "picocolors";
|
|
5
|
+
import { parse as parseYaml } from "yaml";
|
|
6
|
+
import { resolveRepos, fetchAllSkills, cleanupDirs, } from "../git.js";
|
|
7
|
+
import { SKILLS_DIR } from "../config.js";
|
|
8
|
+
export const infoCommand = new Command("info")
|
|
9
|
+
.description("Show detailed information about a skill")
|
|
10
|
+
.argument("<skill>", "Skill name or directory name to inspect")
|
|
11
|
+
.option("-r, --repo <url>", "Override the source repository URL")
|
|
12
|
+
.action(async function (skillName) {
|
|
13
|
+
const opts = this.optsWithGlobals();
|
|
14
|
+
try {
|
|
15
|
+
const repos = resolveRepos(opts.repo);
|
|
16
|
+
console.log(pc.gray("\n📡 Fetching skill details...\n"));
|
|
17
|
+
const { skills, repoCloneMap } = fetchAllSkills(repos);
|
|
18
|
+
const clonedDirs = [...repoCloneMap.values()];
|
|
19
|
+
// Find the skill
|
|
20
|
+
const skill = skills.find((s) => s.dirName === skillName || s.name === skillName);
|
|
21
|
+
if (!skill) {
|
|
22
|
+
console.error(pc.red(`Error: Skill "${skillName}" not found.`), `\nAvailable: ${skills.map((s) => s.dirName).join(", ")}`);
|
|
23
|
+
cleanupDirs(clonedDirs);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
// Read full SKILL.md content
|
|
27
|
+
const clonedDir = repoCloneMap.get(skill.repo);
|
|
28
|
+
if (!clonedDir) {
|
|
29
|
+
cleanupDirs(clonedDirs);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const skillDir = path.join(clonedDir, SKILLS_DIR, skill.dirName);
|
|
33
|
+
const skillMdPath = path.join(skillDir, "SKILL.md");
|
|
34
|
+
const skillMdContent = fs.readFileSync(skillMdPath, "utf-8");
|
|
35
|
+
// Extract full description from frontmatter
|
|
36
|
+
const fullDescription = extractFullDescription(skillMdContent);
|
|
37
|
+
// Check if it uses references
|
|
38
|
+
const usesReferences = skillMdContent.includes("references/") || skillMdContent.includes("references\\");
|
|
39
|
+
// List files in skill directory
|
|
40
|
+
const skillFiles = listFilesRecursive(skillDir, skillDir);
|
|
41
|
+
// Count lines in SKILL.md
|
|
42
|
+
const lineCount = skillMdContent.split("\n").length;
|
|
43
|
+
// Output
|
|
44
|
+
console.log(pc.cyan(pc.bold(` 📦 ${skill.name}`)));
|
|
45
|
+
console.log(pc.gray(" ─".repeat(30)));
|
|
46
|
+
console.log();
|
|
47
|
+
console.log(pc.bold(" Description:"));
|
|
48
|
+
if (fullDescription) {
|
|
49
|
+
for (const line of fullDescription.split("\n")) {
|
|
50
|
+
console.log(` ${pc.white(line.trim())}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(` ${pc.gray("No description")}`);
|
|
55
|
+
}
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(pc.bold(" Details:"));
|
|
58
|
+
console.log(` Source: ${pc.gray(skill.repo)}`);
|
|
59
|
+
console.log(` Directory: ${pc.green(skill.dirName)}`);
|
|
60
|
+
console.log(` SKILL.md: ${pc.gray(`${lineCount} lines`)}`);
|
|
61
|
+
console.log(` References: ${usesReferences ? pc.yellow("Yes (will install references/ directory)") : pc.gray("No")}`);
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(pc.bold(" Files:"));
|
|
64
|
+
for (const file of skillFiles) {
|
|
65
|
+
console.log(` ${pc.gray(file)}`);
|
|
66
|
+
}
|
|
67
|
+
console.log();
|
|
68
|
+
cleanupDirs(clonedDirs);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error instanceof Error) {
|
|
72
|
+
console.error(pc.red(`\n❌ ${error.message}`));
|
|
73
|
+
}
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Extract the full multi-line description from SKILL.md frontmatter.
|
|
79
|
+
*/
|
|
80
|
+
function extractFullDescription(content) {
|
|
81
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
82
|
+
if (!match)
|
|
83
|
+
return "";
|
|
84
|
+
try {
|
|
85
|
+
const parsed = parseYaml(match[1]);
|
|
86
|
+
if (typeof parsed.description === "string") {
|
|
87
|
+
return parsed.description.trim();
|
|
88
|
+
}
|
|
89
|
+
return "";
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* List all files in a directory recursively, returning paths relative to baseDir.
|
|
97
|
+
*/
|
|
98
|
+
function listFilesRecursive(dir, baseDir) {
|
|
99
|
+
const results = [];
|
|
100
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
const fullPath = path.join(dir, entry.name);
|
|
103
|
+
const relativePath = path.relative(baseDir, fullPath);
|
|
104
|
+
if (entry.isDirectory()) {
|
|
105
|
+
results.push(...listFilesRecursive(fullPath, baseDir));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
results.push(relativePath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAqElB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { confirm } from "@inquirer/prompts";
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
import { CONFIG_FILENAME, DEFAULT_REPO } from "../config.js";
|
|
7
|
+
import { cloneRepo, cleanupDirs, scanAvailableReferences } from "../git.js";
|
|
8
|
+
import { promptSelectAgent, promptForRepos, promptSelectTechs, promptSelectVcs } from "../prompts.js";
|
|
9
|
+
export const initCommand = new Command("init")
|
|
10
|
+
.description(`Initialize a ${CONFIG_FILENAME} configuration file`)
|
|
11
|
+
.action(async () => {
|
|
12
|
+
const configPath = path.resolve(process.cwd(), CONFIG_FILENAME);
|
|
13
|
+
if (fs.existsSync(configPath)) {
|
|
14
|
+
const overwrite = await confirm({
|
|
15
|
+
message: `${CONFIG_FILENAME} already exists. Overwrite?`,
|
|
16
|
+
default: false,
|
|
17
|
+
});
|
|
18
|
+
if (!overwrite) {
|
|
19
|
+
console.log(pc.yellow("Aborted."));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
console.log(pc.cyan(`\nLet's set up your ${CONFIG_FILENAME}!\n`));
|
|
24
|
+
// 1. Default Agent
|
|
25
|
+
console.log(pc.bold("1. Default Agent"));
|
|
26
|
+
console.log(pc.gray("Which AI agent do you use most often in this project?"));
|
|
27
|
+
const agent = await promptSelectAgent();
|
|
28
|
+
// 2. Custom Repositories
|
|
29
|
+
console.log(pc.bold("\n2. Repositories"));
|
|
30
|
+
console.log(pc.gray(`Default repository: ${DEFAULT_REPO}`));
|
|
31
|
+
const repos = await promptForRepos(DEFAULT_REPO);
|
|
32
|
+
// 3. Optional References
|
|
33
|
+
console.log(pc.bold("\n3. References Defaults"));
|
|
34
|
+
console.log(pc.gray("Scanning remote repositories for available references..."));
|
|
35
|
+
const finalRepos = (repos.length > 1 || repos[0] !== DEFAULT_REPO) ? repos : [DEFAULT_REPO];
|
|
36
|
+
const clonedDirs = [];
|
|
37
|
+
try {
|
|
38
|
+
for (const repo of finalRepos) {
|
|
39
|
+
clonedDirs.push(cloneRepo(repo));
|
|
40
|
+
}
|
|
41
|
+
const { techs, vcs } = scanAvailableReferences(clonedDirs);
|
|
42
|
+
let selectedTechs = [];
|
|
43
|
+
if (techs.length > 0) {
|
|
44
|
+
selectedTechs = await promptSelectTechs(techs);
|
|
45
|
+
}
|
|
46
|
+
let selectedVcs;
|
|
47
|
+
if (vcs.length > 0) {
|
|
48
|
+
selectedVcs = await promptSelectVcs(vcs);
|
|
49
|
+
}
|
|
50
|
+
// 4. Write Config
|
|
51
|
+
const config = {
|
|
52
|
+
defaultAgent: agent.flag,
|
|
53
|
+
};
|
|
54
|
+
if (repos.length > 1 || repos[0] !== DEFAULT_REPO) {
|
|
55
|
+
config.repos = repos;
|
|
56
|
+
}
|
|
57
|
+
if (selectedTechs.length > 0) {
|
|
58
|
+
config.techs = selectedTechs;
|
|
59
|
+
}
|
|
60
|
+
if (selectedVcs) {
|
|
61
|
+
config.vcs = selectedVcs;
|
|
62
|
+
}
|
|
63
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
cleanupDirs(clonedDirs);
|
|
67
|
+
}
|
|
68
|
+
console.log(pc.green(`\n🎉 Successfully created ${CONFIG_FILENAME}`));
|
|
69
|
+
console.log(pc.gray("Run \`agent-skills add\` and we'll use these defaults automatically.\n"));
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEtG,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACzC,WAAW,CAAC,gBAAgB,eAAe,qBAAqB,CAAC;KACjE,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC5B,OAAO,EAAE,GAAG,eAAe,6BAA6B;YACxD,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,OAAO;QACX,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,eAAe,KAAK,CAAC,CAAC,CAAC;IAElE,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAExC,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAEjD,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAEjF,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAE3D,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,WAA+B,CAAC;QACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,WAAW,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,kBAAkB;QAClB,MAAM,MAAM,GAAkB;YAC1B,YAAY,EAAE,KAAK,CAAC,IAAI;SAC3B,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC;QAC7B,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC;YAAS,CAAC;QACP,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,eAAe,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAqElB,CAAC"}
|
package/dist/commands/list.js
CHANGED
|
@@ -8,7 +8,8 @@ export const listCommand = new Command("list")
|
|
|
8
8
|
.description("List installed skills or available remote skills")
|
|
9
9
|
.option("--remote", "List available skills from the remote repository")
|
|
10
10
|
.option("-r, --repo <url>", "Override the source repository URL")
|
|
11
|
-
.action(async (
|
|
11
|
+
.action(async function () {
|
|
12
|
+
const opts = this.optsWithGlobals();
|
|
12
13
|
try {
|
|
13
14
|
if (opts.remote) {
|
|
14
15
|
// List remote skills
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACzC,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,UAAU,EAAE,kDAAkD,CAAC;KACtE,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;KAChE,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA+HpB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import pc from "picocolors";
|
|
5
|
+
import { findAgentByFlag, getAllAgentFlags } from "../agents.js";
|
|
6
|
+
import { scanLocalSkills, getInstallDir } from "../git.js";
|
|
7
|
+
import { REFERENCES_DIR, loadProjectConfig, readLockFile, writeLockFile } from "../config.js";
|
|
8
|
+
import { promptSelectAgent, promptSelectSkillsToRemove } from "../prompts.js";
|
|
9
|
+
export const removeCommand = new Command("remove")
|
|
10
|
+
.alias("rm")
|
|
11
|
+
.description("Remove installed skills from your project (or globally with -g)")
|
|
12
|
+
.argument("[skills...]", "Skill names to remove (omit for interactive mode)")
|
|
13
|
+
.option("-t, --tool <agent>", `AI agent to remove from (${getAllAgentFlags().slice(0, 5).join(", ")}...)`)
|
|
14
|
+
.option("-g, --global", "Remove from user-level global directory", false)
|
|
15
|
+
.action(async function (skillNames) {
|
|
16
|
+
const opts = this.optsWithGlobals();
|
|
17
|
+
try {
|
|
18
|
+
// 1. Resolve agent
|
|
19
|
+
let agent = opts.tool ? findAgentByFlag(opts.tool) : undefined;
|
|
20
|
+
if (opts.tool && !agent) {
|
|
21
|
+
console.error(pc.red(`Error: Unknown agent "${opts.tool}".`), `\nValid agents: ${getAllAgentFlags().join(", ")}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
if (!agent) {
|
|
25
|
+
const config = loadProjectConfig();
|
|
26
|
+
if (config?.defaultAgent) {
|
|
27
|
+
const defaultAgentObj = findAgentByFlag(config.defaultAgent);
|
|
28
|
+
if (defaultAgentObj)
|
|
29
|
+
agent = defaultAgentObj;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!agent) {
|
|
33
|
+
agent = await promptSelectAgent();
|
|
34
|
+
}
|
|
35
|
+
console.log(pc.cyan(`\n🎯 Target agent: ${pc.bold(agent.name)}`) +
|
|
36
|
+
(opts.global ? pc.yellow(" (global)") : ""));
|
|
37
|
+
// 2. Scan locally installed skills
|
|
38
|
+
const installDir = getInstallDir(agent.projectPath, agent.globalPath, opts.global);
|
|
39
|
+
const localSkills = scanLocalSkills(installDir);
|
|
40
|
+
if (localSkills.length === 0) {
|
|
41
|
+
console.log(pc.yellow("\n⚠️ No skills installed for this agent.\n" +
|
|
42
|
+
' Run "agent-skills add" to install skills.'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// 3. Resolve which skills to remove
|
|
46
|
+
let selectedDirNames;
|
|
47
|
+
if (skillNames.length > 0) {
|
|
48
|
+
// Non-interactive: validate provided skill names
|
|
49
|
+
selectedDirNames = [];
|
|
50
|
+
for (const name of skillNames) {
|
|
51
|
+
const found = localSkills.find((s) => s.dirName === name || s.name === name);
|
|
52
|
+
if (!found) {
|
|
53
|
+
console.error(pc.red(`Error: Skill "${name}" is not installed.`), `\nInstalled: ${localSkills.map((s) => s.dirName).join(", ")}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
selectedDirNames.push(found.dirName);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Interactive: show multi-select
|
|
61
|
+
selectedDirNames = await promptSelectSkillsToRemove(localSkills);
|
|
62
|
+
if (selectedDirNames.length === 0) {
|
|
63
|
+
console.log(pc.yellow("\nNo skills selected. Aborting."));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// 4. Remove each selected skill
|
|
68
|
+
console.log(pc.gray(`\n🗑️ Removing from: ${installDir}\n`));
|
|
69
|
+
const lock = readLockFile(installDir);
|
|
70
|
+
for (const dirName of selectedDirNames) {
|
|
71
|
+
const skill = localSkills.find((s) => s.dirName === dirName);
|
|
72
|
+
const skillPath = path.join(installDir, dirName);
|
|
73
|
+
fs.rmSync(skillPath, { recursive: true, force: true });
|
|
74
|
+
if (lock.skills[skill.name]) {
|
|
75
|
+
delete lock.skills[skill.name];
|
|
76
|
+
}
|
|
77
|
+
console.log(pc.red(` ✖ ${skill.name} — removed`));
|
|
78
|
+
}
|
|
79
|
+
writeLockFile(installDir, lock);
|
|
80
|
+
// 5. Cleanup orphaned references
|
|
81
|
+
const remainingSkills = scanLocalSkills(installDir);
|
|
82
|
+
const referencesDir = path.resolve(installDir, "..", REFERENCES_DIR);
|
|
83
|
+
if (fs.existsSync(referencesDir)) {
|
|
84
|
+
const anySkillNeedsRefs = remainingSkills.some((skill) => {
|
|
85
|
+
const skillMdPath = path.join(installDir, skill.dirName, "SKILL.md");
|
|
86
|
+
if (!fs.existsSync(skillMdPath))
|
|
87
|
+
return false;
|
|
88
|
+
const content = fs.readFileSync(skillMdPath, "utf-8");
|
|
89
|
+
return content.includes("references/") || content.includes("references\\");
|
|
90
|
+
});
|
|
91
|
+
if (!anySkillNeedsRefs) {
|
|
92
|
+
fs.rmSync(referencesDir, { recursive: true, force: true });
|
|
93
|
+
console.log(pc.gray("\n 🧹 Cleaned up unused references directory."));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
console.log(pc.green(`\n🎉 Successfully removed ${selectedDirNames.length} skill(s).`));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof Error) {
|
|
100
|
+
console.error(pc.red(`\n❌ ${error.message}`));
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAuDpB,CAAC"}
|
package/dist/commands/search.js
CHANGED
|
@@ -6,7 +6,8 @@ export const searchCommand = new Command("search")
|
|
|
6
6
|
.description("Search for skills by keyword in the remote repository")
|
|
7
7
|
.argument("<keyword>", "Keyword to search for in skill names and descriptions")
|
|
8
8
|
.option("-r, --repo <url>", "Override the source repository URL")
|
|
9
|
-
.action(async (keyword
|
|
9
|
+
.action(async function (keyword) {
|
|
10
|
+
const opts = this.optsWithGlobals();
|
|
10
11
|
try {
|
|
11
12
|
const repos = resolveRepos(opts.repo);
|
|
12
13
|
console.log(pc.cyan(`\n🔍 Searching for "${keyword}"...\n`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEtE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,uDAAuD,CAAC;KACpE,QAAQ,CAAC,WAAW,EAAE,uDAAuD,CAAC;KAC9E,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;KAChE,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,aAAa,SA4HrB,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import pc from "picocolors";
|
|
3
3
|
import { AGENTS } from "../agents.js";
|
|
4
|
-
import { resolveRepos, fetchAllSkills, installSkill, scanLocalSkills, cleanupDirs, getInstallDir, } from "../git.js";
|
|
4
|
+
import { resolveRepos, fetchAllSkills, installSkill, scanLocalSkills, cleanupDirs, getInstallDir, getRepoCommitHash, } from "../git.js";
|
|
5
|
+
import { readLockFile, writeLockFile } from "../config.js";
|
|
5
6
|
export const updateCommand = new Command("update")
|
|
6
7
|
.description("Update installed skills to the latest version")
|
|
7
8
|
.argument("[skills...]", "Specific skill names to update (omit to update all)")
|
|
8
9
|
.option("-g, --global", "Update globally installed skills", false)
|
|
9
10
|
.option("-r, --repo <url>", "Override the source repository URL")
|
|
10
|
-
.action(async (skillNames
|
|
11
|
+
.action(async function (skillNames) {
|
|
12
|
+
const opts = this.optsWithGlobals();
|
|
11
13
|
try {
|
|
12
14
|
const repos = resolveRepos(opts.repo);
|
|
13
15
|
console.log(pc.cyan("\n🔄 Checking for skill updates...\n"));
|
|
@@ -21,8 +23,14 @@ export const updateCommand = new Command("update")
|
|
|
21
23
|
}
|
|
22
24
|
// 2. Determine which agent directories to scan
|
|
23
25
|
let updatedCount = 0;
|
|
26
|
+
const processedDirs = new Set();
|
|
24
27
|
for (const agent of AGENTS) {
|
|
25
28
|
const installDir = getInstallDir(agent.projectPath, agent.globalPath, opts.global);
|
|
29
|
+
// Deduplicate if multiple agents point to the same directory
|
|
30
|
+
if (processedDirs.has(installDir)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
processedDirs.add(installDir);
|
|
26
34
|
const localSkills = scanLocalSkills(installDir);
|
|
27
35
|
if (localSkills.length === 0)
|
|
28
36
|
continue;
|
|
@@ -35,6 +43,8 @@ export const updateCommand = new Command("update")
|
|
|
35
43
|
if (toUpdate.length === 0)
|
|
36
44
|
continue;
|
|
37
45
|
console.log(pc.bold(` ${agent.name} (${opts.global ? agent.globalPath : agent.projectPath}/)`));
|
|
46
|
+
const lock = readLockFile(installDir);
|
|
47
|
+
let agentUpdated = false;
|
|
38
48
|
for (const local of toUpdate) {
|
|
39
49
|
const remote = remoteSkills.find((r) => r.dirName === local.dirName || r.name === local.name);
|
|
40
50
|
if (!remote) {
|
|
@@ -44,9 +54,24 @@ export const updateCommand = new Command("update")
|
|
|
44
54
|
const clonedDir = repoCloneMap.get(remote.repo);
|
|
45
55
|
if (!clonedDir)
|
|
46
56
|
continue;
|
|
57
|
+
const remoteCommit = getRepoCommitHash(clonedDir);
|
|
58
|
+
const localLock = lock.skills[local.name];
|
|
59
|
+
if (localLock && localLock.version === remoteCommit) {
|
|
60
|
+
console.log(pc.gray(` ⏭ ${local.name} — already up to date`));
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
47
63
|
installSkill(clonedDir, remote.dirName, installDir);
|
|
64
|
+
lock.skills[local.name] = {
|
|
65
|
+
version: remoteCommit,
|
|
66
|
+
repo: remote.repo,
|
|
67
|
+
installedAt: new Date().toISOString(),
|
|
68
|
+
};
|
|
48
69
|
console.log(pc.green(` ✅ ${local.name} — updated`));
|
|
49
70
|
updatedCount++;
|
|
71
|
+
agentUpdated = true;
|
|
72
|
+
}
|
|
73
|
+
if (agentUpdated) {
|
|
74
|
+
writeLockFile(installDir, lock);
|
|
50
75
|
}
|
|
51
76
|
console.log();
|
|
52
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACH,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACH,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,EACb,iBAAiB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,WAAW,CAAC,+CAA+C,CAAC;KAC5D,QAAQ,CAAC,aAAa,EAAE,qDAAqD,CAAC;KAC9E,MAAM,CAAC,cAAc,EAAE,kCAAkC,EAAE,KAAK,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;KAChE,MAAM,CAAC,KAAK,WAA0B,UAAoB;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAE7D,qCAAqC;QACrC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACtE,WAAW,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO;QACX,CAAC;QAED,+CAA+C;QAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,aAAa,CAC5B,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,UAAU,EAChB,IAAI,CAAC,MAAM,CACd,CAAC;YAEF,6DAA6D;YAC7D,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,SAAS;YACb,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9B,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEvC,sEAAsE;YACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACzC,OAAO,UAAU,CAAC,IAAI,CAClB,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAC1D,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAEjG,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,YAAY,GAAG,KAAK,CAAC;YAEzB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAC9D,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,IAAI,CACH,UAAU,KAAK,CAAC,IAAI,kCAAkC,CACzD,CACJ,CAAC;oBACF,SAAS;gBACb,CAAC;gBAED,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;oBAClD,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,IAAI,CACH,UAAU,KAAK,CAAC,IAAI,uBAAuB,CAC9C,CACJ,CAAC;oBACF,SAAS;gBACb,CAAC;gBAED,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAEpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;oBACtB,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACxC,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;gBACvD,YAAY,EAAE,CAAC;gBACf,YAAY,GAAG,IAAI,CAAC;YACxB,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACf,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,MAAM,CACL,0CAA0C;gBAC1C,kDAAkD,CACrD,CACJ,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,KAAK,CAAC,cAAc,YAAY,yBAAyB,CAAC,CAChE,CAAC;QACN,CAAC;QAED,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CACA,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
export declare const DEFAULT_REPO = "https://github.com/jame2408/agent-skills.git";
|
|
3
3
|
/** Name of the local project config file for multi-repo support */
|
|
4
4
|
export declare const CONFIG_FILENAME = ".agent-skills.json";
|
|
5
|
+
/** Name of the lock file used for version tracking */
|
|
6
|
+
export declare const LOCK_FILENAME = ".agent-skills-lock.json";
|
|
5
7
|
/** Expected directory names inside the skills repo */
|
|
6
8
|
export declare const SKILLS_DIR = "skills";
|
|
7
9
|
export declare const REFERENCES_DIR = "references";
|
|
@@ -11,6 +13,8 @@ export declare const REFERENCES_DIR = "references";
|
|
|
11
13
|
export interface SkillMeta {
|
|
12
14
|
name: string;
|
|
13
15
|
description: string;
|
|
16
|
+
/** Optional short trigger/usage hint for post-install display */
|
|
17
|
+
trigger?: string;
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* Represents a skill discovered from a repo.
|
|
@@ -24,13 +28,41 @@ export interface SkillInfo {
|
|
|
24
28
|
dirName: string;
|
|
25
29
|
/** Source repo URL */
|
|
26
30
|
repo: string;
|
|
31
|
+
/** Optional trigger/usage hint */
|
|
32
|
+
trigger?: string;
|
|
27
33
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Project-level config file shape (.agent-skills.json).
|
|
30
|
-
*/
|
|
31
34
|
export interface ProjectConfig {
|
|
32
|
-
|
|
35
|
+
/** Default AI agent flag (e.g. "cursor", "claude-code") */
|
|
36
|
+
defaultAgent?: string;
|
|
37
|
+
/** Array of repository URLs to fetch skills from */
|
|
38
|
+
repos?: string[];
|
|
39
|
+
/** Preferred technology stacks for references (e.g. ["dotnet", "python"]) */
|
|
40
|
+
techs?: string[];
|
|
41
|
+
/** Preferred VCS platform for references (e.g. "github" or "gitlab") */
|
|
42
|
+
vcs?: string;
|
|
43
|
+
}
|
|
44
|
+
/** Lock data for a specific skill */
|
|
45
|
+
export interface SkillLockData {
|
|
46
|
+
/** The commit hash of the git repository when installed */
|
|
47
|
+
version: string;
|
|
48
|
+
/** The source repository URL */
|
|
49
|
+
repo: string;
|
|
50
|
+
/** ISO timestamp of when it was installed */
|
|
51
|
+
installedAt: string;
|
|
52
|
+
}
|
|
53
|
+
/** The structure of the .agent-skills-lock.json file */
|
|
54
|
+
export interface LockFile {
|
|
55
|
+
skills: Record<string, SkillLockData>;
|
|
33
56
|
}
|
|
57
|
+
export declare function loadProjectConfig(): ProjectConfig | null;
|
|
58
|
+
/**
|
|
59
|
+
* Read the lock file from a target directory
|
|
60
|
+
*/
|
|
61
|
+
export declare function readLockFile(targetDir: string): LockFile;
|
|
62
|
+
/**
|
|
63
|
+
* Write the lock file to a target directory
|
|
64
|
+
*/
|
|
65
|
+
export declare function writeLockFile(targetDir: string, lock: LockFile): void;
|
|
34
66
|
/**
|
|
35
67
|
* Parse YAML frontmatter from a SKILL.md content string.
|
|
36
68
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,eAAO,MAAM,YAAY,iDAAiD,CAAC;AAE3E,mEAAmE;AACnE,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,sDAAsD;AACtD,eAAO,MAAM,UAAU,WAAW,CAAC;AACnC,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,eAAO,MAAM,YAAY,iDAAiD,CAAC;AAE3E,mEAAmE;AACnE,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,sDAAsD;AACtD,eAAO,MAAM,aAAa,4BAA4B,CAAC;AAEvD,sDAAsD;AACtD,eAAO,MAAM,UAAU,WAAW,CAAC;AACnC,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC1B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAOD,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAWxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAUxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAGrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA8BvE"}
|
package/dist/config.js
CHANGED
|
@@ -3,9 +3,51 @@ import { parse as parseYaml } from "yaml";
|
|
|
3
3
|
export const DEFAULT_REPO = "https://github.com/jame2408/agent-skills.git";
|
|
4
4
|
/** Name of the local project config file for multi-repo support */
|
|
5
5
|
export const CONFIG_FILENAME = ".agent-skills.json";
|
|
6
|
+
/** Name of the lock file used for version tracking */
|
|
7
|
+
export const LOCK_FILENAME = ".agent-skills-lock.json";
|
|
6
8
|
/** Expected directory names inside the skills repo */
|
|
7
9
|
export const SKILLS_DIR = "skills";
|
|
8
10
|
export const REFERENCES_DIR = "references";
|
|
11
|
+
/**
|
|
12
|
+
* Load the project config if it exists.
|
|
13
|
+
*/
|
|
14
|
+
import fs from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
export function loadProjectConfig() {
|
|
17
|
+
const configPath = path.resolve(process.cwd(), CONFIG_FILENAME);
|
|
18
|
+
if (fs.existsSync(configPath)) {
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read the lock file from a target directory
|
|
31
|
+
*/
|
|
32
|
+
export function readLockFile(targetDir) {
|
|
33
|
+
const lockPath = path.join(targetDir, LOCK_FILENAME);
|
|
34
|
+
if (fs.existsSync(lockPath)) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(fs.readFileSync(lockPath, "utf-8"));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return { skills: {} };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { skills: {} };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Write the lock file to a target directory
|
|
46
|
+
*/
|
|
47
|
+
export function writeLockFile(targetDir, lock) {
|
|
48
|
+
const lockPath = path.join(targetDir, LOCK_FILENAME);
|
|
49
|
+
fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + "\n");
|
|
50
|
+
}
|
|
9
51
|
/**
|
|
10
52
|
* Parse YAML frontmatter from a SKILL.md content string.
|
|
11
53
|
*/
|
|
@@ -27,7 +69,14 @@ export function parseSkillFrontmatter(content) {
|
|
|
27
69
|
}
|
|
28
70
|
if (!name)
|
|
29
71
|
return null;
|
|
30
|
-
|
|
72
|
+
let trigger = undefined;
|
|
73
|
+
if (parsed.metadata && typeof parsed.metadata === "object") {
|
|
74
|
+
const metaObj = parsed.metadata;
|
|
75
|
+
if (typeof metaObj.trigger === "string") {
|
|
76
|
+
trigger = metaObj.trigger.trim();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { name, description, trigger };
|
|
31
80
|
}
|
|
32
81
|
catch {
|
|
33
82
|
return null;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,8CAA8C,CAAC;AAE3E,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts
CHANGED
|
@@ -9,6 +9,10 @@ export declare function resolveRepos(repoFlag?: string): string[];
|
|
|
9
9
|
* Returns the path to the cloned directory.
|
|
10
10
|
*/
|
|
11
11
|
export declare function cloneRepo(repoUrl: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Get the latest commit hash (HEAD) from a cloned local repository.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getRepoCommitHash(clonedDir: string): string;
|
|
12
16
|
/**
|
|
13
17
|
* Scan a cloned repo's skills/ directory and return a list of SkillInfo.
|
|
14
18
|
*/
|
|
@@ -21,10 +25,18 @@ export declare function fetchAllSkills(repos: string[]): {
|
|
|
21
25
|
skills: SkillInfo[];
|
|
22
26
|
repoCloneMap: Map<string, string>;
|
|
23
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Scan a cloned repo's references/ directory to identify available techs and VCS options.
|
|
30
|
+
*/
|
|
31
|
+
export declare function scanAvailableReferences(clonedDirs: string[]): {
|
|
32
|
+
techs: string[];
|
|
33
|
+
vcs: string[];
|
|
34
|
+
};
|
|
24
35
|
/**
|
|
25
36
|
* Copy a skill directory + references directory from a cloned repo into target.
|
|
37
|
+
* Optionally filter which tech stacks and VCS files are installed.
|
|
26
38
|
*/
|
|
27
|
-
export declare function installSkill(clonedDir: string, skillDirName: string, targetBaseDir: string): void;
|
|
39
|
+
export declare function installSkill(clonedDir: string, skillDirName: string, targetBaseDir: string, selectedTechs?: string[], selectedVcs?: string): void;
|
|
28
40
|
/**
|
|
29
41
|
* Recursively copy contents of srcDir into destDir (overwrite existing files).
|
|
30
42
|
*/
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,SAAS,EAEjB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,SAAS,EAEjB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CA6B1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG;IAC7C,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAaA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,EAAE,CAAC;CACjB,CAiCA;AAED;;;GAGG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,WAAW,CAAC,EAAE,MAAM,GACrB,IAAI,CAyEN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CActE;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAClB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAQhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,SAAS,EAAE,MAAM,GAClB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B/D"}
|
package/dist/git.js
CHANGED
|
@@ -45,6 +45,20 @@ export function cloneRepo(repoUrl) {
|
|
|
45
45
|
}
|
|
46
46
|
return tmpDir;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the latest commit hash (HEAD) from a cloned local repository.
|
|
50
|
+
*/
|
|
51
|
+
export function getRepoCommitHash(clonedDir) {
|
|
52
|
+
try {
|
|
53
|
+
return execFileSync("git", ["rev-parse", "HEAD"], {
|
|
54
|
+
cwd: clonedDir,
|
|
55
|
+
encoding: "utf-8",
|
|
56
|
+
}).trim();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return "unknown";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
48
62
|
/**
|
|
49
63
|
* Scan a cloned repo's skills/ directory and return a list of SkillInfo.
|
|
50
64
|
*/
|
|
@@ -70,6 +84,7 @@ export function scanSkills(clonedDir, repoUrl) {
|
|
|
70
84
|
description: meta.description,
|
|
71
85
|
dirName: entry.name,
|
|
72
86
|
repo: repoUrl,
|
|
87
|
+
trigger: meta.trigger,
|
|
73
88
|
});
|
|
74
89
|
}
|
|
75
90
|
return results;
|
|
@@ -90,10 +105,44 @@ export function fetchAllSkills(repos) {
|
|
|
90
105
|
}
|
|
91
106
|
return { skills: allSkills, repoCloneMap };
|
|
92
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Scan a cloned repo's references/ directory to identify available techs and VCS options.
|
|
110
|
+
*/
|
|
111
|
+
export function scanAvailableReferences(clonedDirs) {
|
|
112
|
+
const techSet = new Set();
|
|
113
|
+
const vcsSet = new Set();
|
|
114
|
+
// Core references that are automatically installed and should not be offered as options
|
|
115
|
+
const coreRefs = ["general", "runtime", "shell", "vcs"];
|
|
116
|
+
for (const dir of clonedDirs) {
|
|
117
|
+
const refRoot = path.join(dir, REFERENCES_DIR);
|
|
118
|
+
if (!fs.existsSync(refRoot))
|
|
119
|
+
continue;
|
|
120
|
+
const entries = fs.readdirSync(refRoot, { withFileTypes: true });
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
if (!entry.isDirectory())
|
|
123
|
+
continue;
|
|
124
|
+
if (!coreRefs.includes(entry.name)) {
|
|
125
|
+
techSet.add(entry.name);
|
|
126
|
+
}
|
|
127
|
+
if (entry.name === "vcs") {
|
|
128
|
+
const vcsDir = path.join(refRoot, "vcs");
|
|
129
|
+
const vcsEntries = fs.readdirSync(vcsDir, { withFileTypes: true });
|
|
130
|
+
for (const vcsEntry of vcsEntries) {
|
|
131
|
+
if (vcsEntry.isFile() && vcsEntry.name.startsWith("code-review-posting-") && vcsEntry.name.endsWith(".ref.md")) {
|
|
132
|
+
const vcsName = vcsEntry.name.replace("code-review-posting-", "").replace(".ref.md", "");
|
|
133
|
+
vcsSet.add(vcsName);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { techs: Array.from(techSet).sort(), vcs: Array.from(vcsSet).sort() };
|
|
140
|
+
}
|
|
93
141
|
/**
|
|
94
142
|
* Copy a skill directory + references directory from a cloned repo into target.
|
|
143
|
+
* Optionally filter which tech stacks and VCS files are installed.
|
|
95
144
|
*/
|
|
96
|
-
export function installSkill(clonedDir, skillDirName, targetBaseDir) {
|
|
145
|
+
export function installSkill(clonedDir, skillDirName, targetBaseDir, selectedTechs, selectedVcs) {
|
|
97
146
|
const skillSrc = path.join(clonedDir, SKILLS_DIR, skillDirName);
|
|
98
147
|
const refSrc = path.join(clonedDir, REFERENCES_DIR);
|
|
99
148
|
if (!fs.existsSync(skillSrc)) {
|
|
@@ -107,8 +156,61 @@ export function installSkill(clonedDir, skillDirName, targetBaseDir) {
|
|
|
107
156
|
// Copy references alongside skills (go up one level from skills/)
|
|
108
157
|
const targetRefDir = path.resolve(targetBaseDir, "..", REFERENCES_DIR);
|
|
109
158
|
if (fs.existsSync(refSrc)) {
|
|
110
|
-
|
|
111
|
-
|
|
159
|
+
let needsReferences = false;
|
|
160
|
+
const skillMdPath = path.join(skillSrc, "SKILL.md");
|
|
161
|
+
if (fs.existsSync(skillMdPath)) {
|
|
162
|
+
const content = fs.readFileSync(skillMdPath, "utf-8");
|
|
163
|
+
if (content.includes("references/") || content.includes("references\\")) {
|
|
164
|
+
needsReferences = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (needsReferences) {
|
|
168
|
+
fs.mkdirSync(targetRefDir, { recursive: true });
|
|
169
|
+
const refEntries = fs.readdirSync(refSrc, { withFileTypes: true });
|
|
170
|
+
for (const entry of refEntries) {
|
|
171
|
+
const entrySrc = path.join(refSrc, entry.name);
|
|
172
|
+
const entryDest = path.join(targetRefDir, entry.name);
|
|
173
|
+
if (entry.isDirectory()) {
|
|
174
|
+
if (["general", "runtime", "shell"].includes(entry.name)) {
|
|
175
|
+
// Core directories: always install
|
|
176
|
+
copyDirRecursive(entrySrc, entryDest);
|
|
177
|
+
}
|
|
178
|
+
else if (entry.name === "vcs") {
|
|
179
|
+
// VCS directory: filter files based on selectedVcs
|
|
180
|
+
fs.mkdirSync(entryDest, { recursive: true });
|
|
181
|
+
const vcsEntries = fs.readdirSync(entrySrc, { withFileTypes: true });
|
|
182
|
+
for (const vcsEntry of vcsEntries) {
|
|
183
|
+
if (!vcsEntry.isFile())
|
|
184
|
+
continue;
|
|
185
|
+
const vcsFileSrc = path.join(entrySrc, vcsEntry.name);
|
|
186
|
+
const vcsFileDest = path.join(entryDest, vcsEntry.name);
|
|
187
|
+
if (vcsEntry.name === "vcs-platform-commands.ref.md") {
|
|
188
|
+
// Always carry the core vcs commands
|
|
189
|
+
fs.copyFileSync(vcsFileSrc, vcsFileDest);
|
|
190
|
+
}
|
|
191
|
+
else if (vcsEntry.name.startsWith("code-review-posting-")) {
|
|
192
|
+
const vcsStr = vcsEntry.name.replace("code-review-posting-", "").replace(".ref.md", "");
|
|
193
|
+
if (selectedVcs === vcsStr) {
|
|
194
|
+
fs.copyFileSync(vcsFileSrc, vcsFileDest);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Default fallback for other vcs files
|
|
199
|
+
fs.copyFileSync(vcsFileSrc, vcsFileDest);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if (selectedTechs && selectedTechs.includes(entry.name)) {
|
|
204
|
+
// Optional tech directories: install if selected
|
|
205
|
+
copyDirRecursive(entrySrc, entryDest);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// Top level files inside references/
|
|
210
|
+
fs.copyFileSync(entrySrc, entryDest);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
112
214
|
}
|
|
113
215
|
}
|
|
114
216
|
/**
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { addCommand } from "./commands/add.js";
|
|
5
|
+
import { infoCommand } from "./commands/info.js";
|
|
6
|
+
import { initCommand } from "./commands/init.js";
|
|
5
7
|
import { listCommand } from "./commands/list.js";
|
|
8
|
+
import { removeCommand } from "./commands/remove.js";
|
|
6
9
|
import { searchCommand } from "./commands/search.js";
|
|
7
10
|
import { updateCommand } from "./commands/update.js";
|
|
8
11
|
const require = createRequire(import.meta.url);
|
|
@@ -11,9 +14,16 @@ const program = new Command();
|
|
|
11
14
|
program
|
|
12
15
|
.name("agent-skills")
|
|
13
16
|
.description("CLI tool to install, update, and manage Agent Skills across AI coding assistants")
|
|
14
|
-
.version(pkg.version)
|
|
17
|
+
.version(pkg.version)
|
|
18
|
+
// Define global options so they appear in the top-level --help
|
|
19
|
+
.option("-t, --tool <agent>", "Target AI agent (cursor, claude-code, etc.)")
|
|
20
|
+
.option("-g, --global", "Operate on user-level global directory instead of project")
|
|
21
|
+
.option("-r, --repo <url>", "Override the source repository URL");
|
|
15
22
|
program.addCommand(addCommand);
|
|
23
|
+
program.addCommand(infoCommand);
|
|
24
|
+
program.addCommand(initCommand);
|
|
16
25
|
program.addCommand(listCommand);
|
|
26
|
+
program.addCommand(removeCommand);
|
|
17
27
|
program.addCommand(searchCommand);
|
|
18
28
|
program.addCommand(updateCommand);
|
|
19
29
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACrB,+DAA+D;KAC9D,MAAM,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;KAC3E,MAAM,CAAC,cAAc,EAAE,2DAA2D,CAAC;KACnF,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC,CAAC;AAEtE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -12,4 +12,24 @@ export declare function promptSelectSkills(skills: Array<{
|
|
|
12
12
|
description: string;
|
|
13
13
|
dirName: string;
|
|
14
14
|
}>): Promise<string[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Interactively prompt the user to select skills to remove.
|
|
17
|
+
*/
|
|
18
|
+
export declare function promptSelectSkillsToRemove(skills: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
dirName: string;
|
|
22
|
+
}>): Promise<string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Interactively prompt the user to add custom repositories.
|
|
25
|
+
*/
|
|
26
|
+
export declare function promptForRepos(defaultRepo: string): Promise<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Interactively prompt the user to select optional technology stacks.
|
|
29
|
+
*/
|
|
30
|
+
export declare function promptSelectTechs(availableTechs: string[]): Promise<string[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Interactively prompt the user to select an optional VCS platform.
|
|
33
|
+
*/
|
|
34
|
+
export declare function promptSelectVcs(availableVcs: string[]): Promise<string | undefined>;
|
|
15
35
|
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5E;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoC9D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC5C,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtE,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB3E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAanF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiBzF"}
|
package/dist/prompts.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { select, checkbox } from "@inquirer/prompts";
|
|
1
|
+
import { select, checkbox, input, confirm } from "@inquirer/prompts";
|
|
2
|
+
import pc from "picocolors";
|
|
2
3
|
import { AGENTS, POPULAR_AGENT_FLAGS } from "./agents.js";
|
|
3
4
|
/**
|
|
4
5
|
* Interactively prompt the user to select an AI agent (tool).
|
|
@@ -39,10 +40,83 @@ export async function promptSelectSkills(skills) {
|
|
|
39
40
|
const selected = await checkbox({
|
|
40
41
|
message: "📦 Select the skills to install (Space to toggle, Enter to confirm):",
|
|
41
42
|
choices: skills.map((s) => ({
|
|
42
|
-
name: `${s.name}
|
|
43
|
+
name: `${pc.cyan(s.name)} ${pc.gray(`— ${s.description || "No description"}`)}`,
|
|
43
44
|
value: s.dirName,
|
|
44
45
|
})),
|
|
45
46
|
});
|
|
46
47
|
return selected;
|
|
47
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Interactively prompt the user to select skills to remove.
|
|
51
|
+
*/
|
|
52
|
+
export async function promptSelectSkillsToRemove(skills) {
|
|
53
|
+
if (skills.length === 0) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const selected = await checkbox({
|
|
57
|
+
message: "🗑️ Select skills to remove (Space to toggle, Enter to confirm):",
|
|
58
|
+
choices: skills.map((s) => ({
|
|
59
|
+
name: `${pc.red(s.name)} ${pc.gray(`— ${s.description || "No description"}`)}`,
|
|
60
|
+
value: s.dirName,
|
|
61
|
+
})),
|
|
62
|
+
});
|
|
63
|
+
return selected;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Interactively prompt the user to add custom repositories.
|
|
67
|
+
*/
|
|
68
|
+
export async function promptForRepos(defaultRepo) {
|
|
69
|
+
const repos = [defaultRepo];
|
|
70
|
+
let addMore = await confirm({
|
|
71
|
+
message: "Do you want to add a custom/private skill repository?",
|
|
72
|
+
default: false
|
|
73
|
+
});
|
|
74
|
+
while (addMore) {
|
|
75
|
+
const url = await input({
|
|
76
|
+
message: "Enter repository URL (e.g. git@github.com:my-org/my-skills.git):"
|
|
77
|
+
});
|
|
78
|
+
if (url.trim()) {
|
|
79
|
+
repos.push(url.trim());
|
|
80
|
+
}
|
|
81
|
+
addMore = await confirm({
|
|
82
|
+
message: "Add another repository?",
|
|
83
|
+
default: false
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return repos;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Interactively prompt the user to select optional technology stacks.
|
|
90
|
+
*/
|
|
91
|
+
export async function promptSelectTechs(availableTechs) {
|
|
92
|
+
if (availableTechs.length === 0)
|
|
93
|
+
return [];
|
|
94
|
+
const selected = await checkbox({
|
|
95
|
+
message: "📚 Which technology stacks does your project use? (Space to select, Enter to confirm):",
|
|
96
|
+
choices: availableTechs.map((t) => ({
|
|
97
|
+
name: pc.cyan(t),
|
|
98
|
+
value: t,
|
|
99
|
+
})),
|
|
100
|
+
});
|
|
101
|
+
return selected;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Interactively prompt the user to select an optional VCS platform.
|
|
105
|
+
*/
|
|
106
|
+
export async function promptSelectVcs(availableVcs) {
|
|
107
|
+
if (availableVcs.length === 0)
|
|
108
|
+
return undefined;
|
|
109
|
+
const choices = [
|
|
110
|
+
...availableVcs.map((v) => ({
|
|
111
|
+
name: pc.cyan(v),
|
|
112
|
+
value: v,
|
|
113
|
+
})),
|
|
114
|
+
{ name: pc.gray("Skip / None"), value: undefined },
|
|
115
|
+
];
|
|
116
|
+
const selected = await select({
|
|
117
|
+
message: "🐙 Which VCS platform do you use for code reviews?",
|
|
118
|
+
choices: choices,
|
|
119
|
+
});
|
|
120
|
+
return selected;
|
|
121
|
+
}
|
|
48
122
|
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@james-jj-wang/agent-skills-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CLI tool to install, update, and manage Agent Skills across AI coding assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -45,4 +45,4 @@
|
|
|
45
45
|
"tsx": "^4.19.0",
|
|
46
46
|
"@types/node": "^22.0.0"
|
|
47
47
|
}
|
|
48
|
-
}
|
|
48
|
+
}
|