@james-jj-wang/agent-skills-cli 0.1.0 → 0.2.1

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.
@@ -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;AAYpC,eAAO,MAAM,UAAU,SAkGjB,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"}
@@ -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 { promptSelectAgent, promptSelectSkills } from "../prompts.js";
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, opts) => {
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. Install each selected skill
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);
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
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,EACX,iBAAiB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACvC,WAAW,CAAC,wDAAwD,CAAC;KACrE,QAAQ,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC7E,MAAM,CAAC,oBAAoB,EAAE,4BAA4B,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KACzG,MAAM,CAAC,cAAc,EAAE,wCAAwC,EAAE,KAAK,CAAC;KACvE,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,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,mBAAmB;QACnB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CACT,EAAE,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,IAAI,CAAC,EAC9C,mBAAmB,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;gBACvB,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC7D,IAAI,eAAe;oBAAE,KAAK,GAAG,eAAe,CAAC;YACjD,CAAC;QACL,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9C,CAAC;QAEF,kCAAkC;QAClC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACnE,WAAW,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO;QACX,CAAC;QAED,qCAAqC;QACrC,IAAI,gBAA0B,CAAC;QAC/B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,iDAAiD;YACjD,gBAAgB,GAAG,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAC/C,CAAC;gBACF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CACT,EAAE,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAc,CAAC,EAC3C,gBAAgB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5D,CAAC;oBACF,WAAW,CAAC,UAAU,CAAC,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,iCAAiC;YACjC,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC1D,WAAW,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO;YACX,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAE,CAAC;YACzD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACtE,eAAe,GAAG,IAAI,CAAC;oBACvB,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,uCAAuC;QACvC,IAAI,aAAa,GAAyB,MAAM,EAAE,KAAK,CAAC;QACxD,IAAI,WAAW,GAAuB,MAAM,EAAE,GAAG,CAAC;QAElD,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC;YAElG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,WAAW,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,aAAa,CAC3B,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,UAAU,EAChB,IAAI,CAAC,MAAM,CACd,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,SAAS,IAAI,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAErC,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAE,CAAC;YACzD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;YAExE,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBACtB,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC;gBACrC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACxC,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACL,CAAC;QAED,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE/B,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,KAAK,CACJ,+BAA+B,gBAAgB,CAAC,MAAM,gBAAgB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAC7F,CACJ,CAAC;QAEF,aAAa;QACb,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,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const infoCommand: Command;
3
+ //# sourceMappingURL=info.d.ts.map
@@ -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,3 @@
1
+ import { Command } from "commander";
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -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":"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"}
@@ -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,SAoElB,CAAC"}
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"}
@@ -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 (opts) => {
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,EAAE,IAAyC,EAAE,EAAE;IACxD,IAAI,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,qBAAqB;YACrB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;YACxE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YAE9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACJ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBACjD,OAAO,CAAC,GAAG,CACP,KAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,gBAAgB,CAAC,EAAE,CACjF,CAAC;gBACN,CAAC;gBACD,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,qBAAqB,CAAC,CAC5D,CAAC;YACN,CAAC;YACD,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,6DAA6D;YAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACpE,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBACjE,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAEvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;gBAChE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CACP,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CACrE,CAAC;gBACN,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC;YACrC,CAAC;YAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,MAAM,CACL,6CAA6C;oBAC7C,6CAA6C,CAChD,CACJ,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,IAAI,CAAC,YAAY,UAAU,6BAA6B,CAAC,CAC/D,CAAC;YACN,CAAC;QACL,CAAC;IACL,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,CAAC,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const removeCommand: Command;
3
+ //# sourceMappingURL=remove.d.ts.map
@@ -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,SAsDpB,CAAC"}
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"}
@@ -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, opts) => {
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":"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"}
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;AAYpC,eAAO,MAAM,aAAa,SA4FrB,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"}
@@ -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, opts) => {
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,GAChB,MAAM,WAAW,CAAC;AAEnB,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,CACH,KAAK,EACD,UAAoB,EACpB,IAAwC,EAC1C,EAAE;IACA,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;QAErB,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;YACF,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,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,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;gBACvD,YAAY,EAAE,CAAC;YACnB,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,CACJ,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
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
- repos: string[];
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
  */
@@ -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;CACvB;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;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAqBvE"}
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
- return { name, description };
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;
@@ -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;AA+B3C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACzC,gEAAgE;YAChE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW;iBAC/B,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,WAAW,GAAG,SAAS,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
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,aAAa,GAAG,yBAAyB,CAAC;AAEvD,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAsD3C;;GAEG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,MAAM,UAAU,iBAAiB;IAC7B,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,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAa,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAc;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACzC,gEAAgE;YAChE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW;iBAC/B,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,WAAW,GAAG,SAAS,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,OAAO,GAAuB,SAAS,CAAC;QAC5C,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAmC,CAAC;YAC3D,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
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,CA4B1E;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,YAAY,CACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACtB,IAAI,CAsBN;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"}
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
- fs.mkdirSync(targetRefDir, { recursive: true });
111
- copyDirRecursive(refSrc, targetRefDir);
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,CACR,kFAAkF,CACrF;KACA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AACA,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"}
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} ${s.description || "No description"}`,
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
@@ -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;AACrD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AAE5E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACvC,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/C,CAAC;IAQF,MAAM,OAAO,GAAiD;QAC1D,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,WAAW,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC;QACH,EAAE,IAAI,EAAE,WAAoB,EAAE;QAC9B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,WAAW,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC;KACN,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAS;QAClC,OAAO,EAAE,2CAA2C;QACpD,OAAO,EAAE,OAAuE;KACnF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,MAAqE;IAErE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAS;QACpC,OAAO,EACH,uEAAuE;QAC3E,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE;YACxD,KAAK,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;KACN,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@james-jj-wang/agent-skills-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "CLI tool to install, update, and manage Agent Skills across AI coding assistants",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "agent-skills": "./dist/index.js"
8
8
  },
9
9
  "scripts": {
10
- "build": "tsc",
10
+ "validate:frontmatter": "tsx scripts/validate-frontmatter.ts",
11
+ "build": "npm run validate:frontmatter && tsc",
11
12
  "dev": "tsx src/index.ts",
12
13
  "start": "node dist/index.js",
13
14
  "prepublishOnly": "npm run build"
@@ -45,4 +46,4 @@
45
46
  "tsx": "^4.19.0",
46
47
  "@types/node": "^22.0.0"
47
48
  }
48
- }
49
+ }