install-agent-skill 1.2.3 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.bigtech.md +16 -16
- package/README.md +13 -13
- package/bin/add-skill.js +1 -1
- package/bin/add-skill.modular.js +103 -0
- package/bin/add-skill.v2.js +123 -28
- package/bin/lib/ui.js +3 -0
- package/package.json +2 -2
package/README.bigtech.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<img src="https://raw.githubusercontent.com/dataguruin/add-skill/main/.github/logo.svg" height="128">
|
|
3
|
-
<h1 align="center">
|
|
3
|
+
<h1 align="center">install-agent-skill</h1>
|
|
4
4
|
</p>
|
|
5
5
|
|
|
6
6
|
<p align="center">
|
|
7
|
-
<a href="https://www.npmjs.com/package
|
|
8
|
-
<a href="https://www.npmjs.com/package
|
|
7
|
+
<a href="https://www.npmjs.com/package/install-agent-skill"><img src="https://img.shields.io/npm/v/install-agent-skill?style=flat&colorA=18181b&colorB=7c3aed" alt="npm version"></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/install-agent-skill"><img src="https://img.shields.io/npm/d18m/install-agent-skill?style=flat&colorA=18181b&colorB=7c3aed" alt="npm downloads"></a>
|
|
9
9
|
<a href="https://github.com/dataguruin/add-skill/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dataguruin/add-skill?style=flat&colorA=18181b&colorB=7c3aed" alt="license"></a>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
|
|
27
27
|
## What is add-skill?
|
|
28
28
|
|
|
29
|
-
`
|
|
29
|
+
`install-agent-skill` is a CLI tool for managing **Agent Skills**—immutable, verifiable intelligence artifacts that extend your AI agent's capabilities. Think of it as `npm` for AI agents.
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx -y
|
|
32
|
+
npx -y install-agent-skill install dataguruin/coinpika-agent-skills#coinpika-doctrine-pack
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Skills are **data, not code**. They won't execute on your system—they're read by your agent to enhance its behavior.
|
|
@@ -40,16 +40,16 @@ Skills are **data, not code**. They won't execute on your system—they're read
|
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
42
|
# Using npm
|
|
43
|
-
npm install -g
|
|
43
|
+
npm install -g install-agent-skill
|
|
44
44
|
|
|
45
45
|
# Using pnpm
|
|
46
|
-
pnpm add -g
|
|
46
|
+
pnpm add -g install-agent-skill
|
|
47
47
|
|
|
48
48
|
# Using Yarn
|
|
49
|
-
yarn global add
|
|
49
|
+
yarn global add install-agent-skill
|
|
50
50
|
|
|
51
51
|
# Or run directly with npx
|
|
52
|
-
npx -y
|
|
52
|
+
npx -y install-agent-skill <command>
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
> **Requirements:** Node.js 18.0.0 or later
|
|
@@ -61,7 +61,7 @@ npx -y add-agent-skill <command>
|
|
|
61
61
|
### 1. Initialize your workspace
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
npx -y
|
|
64
|
+
npx -y install-agent-skill init
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
This creates the `.agent/skills` directory structure in your project.
|
|
@@ -72,22 +72,22 @@ Install from GitHub with optional version pinning:
|
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
# Latest version
|
|
75
|
-
npx -y
|
|
75
|
+
npx -y install-agent-skill install dataguruin/coinpika-agent-skills#coinpika-pr-reviewer
|
|
76
76
|
|
|
77
77
|
# Specific version
|
|
78
|
-
npx -y
|
|
78
|
+
npx -y install-agent-skill install dataguruin/coinpika-agent-skills#coinpika-doctrine-pack@v1.0.0
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
### 3. List installed skills
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
|
-
npx -y
|
|
84
|
+
npx -y install-agent-skill list
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
### 4. Validate compliance
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
npx -y
|
|
90
|
+
npx -y install-agent-skill validate
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
---
|
|
@@ -132,10 +132,10 @@ Pin exact versions for reproducible builds across your team:
|
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
# Generate lockfile
|
|
135
|
-
npx -y
|
|
135
|
+
npx -y install-agent-skill lock
|
|
136
136
|
|
|
137
137
|
# Install from lockfile
|
|
138
|
-
npx -y
|
|
138
|
+
npx -y install-agent-skill install --locked
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
### Security by Design
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://img.shields.io/badge/
|
|
2
|
+
<img src="https://img.shields.io/badge/install--agent--skill-v1.2.3-000000?style=for-the-badge&logo=npm&logoColor=white" alt="install-agent-skill v1.2.3" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h1 align="center">
|
|
5
|
+
<h1 align="center">install-agent-skill</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>The package manager for AI agent skills.</strong><br/>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<a href="https://www.npmjs.com/package
|
|
14
|
-
<a href="https://www.npmjs.com/package
|
|
13
|
+
<a href="https://www.npmjs.com/package/install-agent-skill"><img src="https://img.shields.io/npm/v/install-agent-skill?style=flat-square&color=000000" alt="npm version"></a>
|
|
14
|
+
<a href="https://www.npmjs.com/package/install-agent-skill"><img src="https://img.shields.io/npm/dm/install-agent-skill?style=flat-square&color=000000" alt="npm downloads"></a>
|
|
15
15
|
<a href="https://github.com/dataguruin/add-skill/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dataguruin/add-skill?style=flat-square&color=000000" alt="license"></a>
|
|
16
16
|
</p>
|
|
17
17
|
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
|
|
27
27
|
## What is add-skill?
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
**install-agent-skill** is a CLI tool for managing Agent Skills—intelligent artifacts that extend your AI coding agent's capabilities.
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx -y
|
|
32
|
+
npx -y install-agent-skill dataguruin/agent-skills
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
```
|
|
@@ -65,13 +65,13 @@ Skills are **data, not code**—they're read by your agent to enhance its behavi
|
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
# Using npx (recommended)
|
|
68
|
-
npx -y
|
|
68
|
+
npx -y install-agent-skill <org/repo>
|
|
69
69
|
|
|
70
70
|
# Global install
|
|
71
|
-
npm install -g
|
|
71
|
+
npm install -g install-agent-skill
|
|
72
72
|
|
|
73
73
|
# Or with pnpm
|
|
74
|
-
pnpm add -g
|
|
74
|
+
pnpm add -g install-agent-skill
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
> **Requires** Node.js 18+
|
|
@@ -83,7 +83,7 @@ pnpm add -g add-agent-skill
|
|
|
83
83
|
### Install skills from GitHub
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
npx -y
|
|
86
|
+
npx -y install-agent-skill dataguruin/agent-skills
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
Interactive prompts let you select which skills to install.
|
|
@@ -91,7 +91,7 @@ Interactive prompts let you select which skills to install.
|
|
|
91
91
|
### List installed skills
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
npx -y
|
|
94
|
+
npx -y install-agent-skill list
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
```
|
|
@@ -113,7 +113,7 @@ npx -y add-agent-skill list
|
|
|
113
113
|
### Check health
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
|
-
npx -y
|
|
116
|
+
npx -y install-agent-skill doctor
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
```
|
|
@@ -187,7 +187,7 @@ skill/
|
|
|
187
187
|
### Antigravity Compatibility Score
|
|
188
188
|
|
|
189
189
|
```bash
|
|
190
|
-
npx -y
|
|
190
|
+
npx -y install-agent-skill analyze coinpika-doctrine-pack
|
|
191
191
|
```
|
|
192
192
|
|
|
193
193
|
```
|
package/bin/add-skill.js
CHANGED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* install-agent-skill
|
|
4
|
+
* Vercel-Style CLI - Modular Entry Point v2.1
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { c, step, fatal, intro, outro } from "./lib/ui.js";
|
|
8
|
+
import { command, params, flags, VERSION } from "./lib/config.js";
|
|
9
|
+
|
|
10
|
+
// --- MAIN ---
|
|
11
|
+
async function main() {
|
|
12
|
+
// Basic command routing
|
|
13
|
+
let cmdModule;
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
switch (command) {
|
|
17
|
+
case "list":
|
|
18
|
+
case "ls":
|
|
19
|
+
cmdModule = await import("./lib/commands/list.js");
|
|
20
|
+
await cmdModule.run();
|
|
21
|
+
break;
|
|
22
|
+
case "init":
|
|
23
|
+
cmdModule = await import("./lib/commands/init.js");
|
|
24
|
+
await cmdModule.run();
|
|
25
|
+
break;
|
|
26
|
+
case "install":
|
|
27
|
+
case "add":
|
|
28
|
+
case "i":
|
|
29
|
+
cmdModule = await import("./lib/commands/install.js");
|
|
30
|
+
await cmdModule.run(params[0]);
|
|
31
|
+
break;
|
|
32
|
+
case "uninstall":
|
|
33
|
+
case "remove":
|
|
34
|
+
case "rm":
|
|
35
|
+
cmdModule = await import("./lib/commands/uninstall.js");
|
|
36
|
+
await cmdModule.run(params[0]);
|
|
37
|
+
break;
|
|
38
|
+
case "update":
|
|
39
|
+
cmdModule = await import("./lib/commands/update.js");
|
|
40
|
+
await cmdModule.run(params[0]);
|
|
41
|
+
break;
|
|
42
|
+
case "lock":
|
|
43
|
+
cmdModule = await import("./lib/commands/lock.js");
|
|
44
|
+
await cmdModule.run();
|
|
45
|
+
break;
|
|
46
|
+
case "verify":
|
|
47
|
+
cmdModule = await import("./lib/commands/verify.js");
|
|
48
|
+
await cmdModule.run();
|
|
49
|
+
break;
|
|
50
|
+
case "doctor":
|
|
51
|
+
cmdModule = await import("./lib/commands/doctor.js");
|
|
52
|
+
await cmdModule.run();
|
|
53
|
+
break;
|
|
54
|
+
case "cache":
|
|
55
|
+
cmdModule = await import("./lib/commands/cache.js");
|
|
56
|
+
await cmdModule.run(params[0]);
|
|
57
|
+
break;
|
|
58
|
+
case "validate":
|
|
59
|
+
case "check":
|
|
60
|
+
cmdModule = await import("./lib/commands/validate.js");
|
|
61
|
+
await cmdModule.run(params[0]);
|
|
62
|
+
break;
|
|
63
|
+
case "analyze":
|
|
64
|
+
cmdModule = await import("./lib/commands/analyze.js");
|
|
65
|
+
await cmdModule.run(params[0]);
|
|
66
|
+
break;
|
|
67
|
+
case "info":
|
|
68
|
+
case "show":
|
|
69
|
+
cmdModule = await import("./lib/commands/info.js");
|
|
70
|
+
await cmdModule.run(params[0]);
|
|
71
|
+
break;
|
|
72
|
+
case "help":
|
|
73
|
+
case "--help":
|
|
74
|
+
case "-h":
|
|
75
|
+
cmdModule = await import("./lib/commands/help.js");
|
|
76
|
+
await cmdModule.run();
|
|
77
|
+
break;
|
|
78
|
+
case "--version":
|
|
79
|
+
case "-V":
|
|
80
|
+
console.log(VERSION);
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
// Handle direct install via org/repo syntax
|
|
84
|
+
if (command.includes("/")) {
|
|
85
|
+
cmdModule = await import("./lib/commands/install.js");
|
|
86
|
+
await cmdModule.run(command);
|
|
87
|
+
} else {
|
|
88
|
+
console.log(`Unknown command: ${command}`);
|
|
89
|
+
cmdModule = await import("./lib/commands/help.js");
|
|
90
|
+
await cmdModule.run();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
console.error(c.red("\nError: " + err.message));
|
|
95
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
main().catch(err => {
|
|
101
|
+
console.error(c.red("\nFatal Error: " + err.message));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
});
|
package/bin/add-skill.v2.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* install-agent-skill
|
|
4
4
|
* Vercel-Style CLI - Full Port v2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -10,6 +10,7 @@ import os from "os";
|
|
|
10
10
|
import { execSync } from "child_process";
|
|
11
11
|
import crypto from "crypto";
|
|
12
12
|
import prompts from "prompts";
|
|
13
|
+
import { multiselect, isCancel, cancel, intro, outro, select, confirm, log, spinner } from "@clack/prompts";
|
|
13
14
|
import kleur from "kleur";
|
|
14
15
|
import ora from "ora";
|
|
15
16
|
import boxen from "boxen";
|
|
@@ -47,7 +48,25 @@ const OFFLINE = flags.has("--offline");
|
|
|
47
48
|
|
|
48
49
|
// --- THEME & SYMBOLS ---
|
|
49
50
|
const S = { branch: "│", diamond: "◇", diamondFilled: "◆", check: "✓", cross: "x", arrow: "→" };
|
|
50
|
-
const c = {
|
|
51
|
+
const c = {
|
|
52
|
+
cyan: kleur.cyan,
|
|
53
|
+
gray: kleur.gray,
|
|
54
|
+
green: kleur.green,
|
|
55
|
+
red: kleur.red,
|
|
56
|
+
yellow: kleur.yellow,
|
|
57
|
+
magenta: kleur.magenta,
|
|
58
|
+
blue: kleur.blue,
|
|
59
|
+
white: kleur.white,
|
|
60
|
+
black: kleur.black,
|
|
61
|
+
bgCyan: kleur.bgCyan,
|
|
62
|
+
bgRed: kleur.bgRed,
|
|
63
|
+
bgGreen: kleur.bgGreen,
|
|
64
|
+
bgYellow: kleur.bgYellow,
|
|
65
|
+
bold: kleur.bold,
|
|
66
|
+
dim: kleur.dim,
|
|
67
|
+
italic: kleur.italic,
|
|
68
|
+
underline: kleur.underline
|
|
69
|
+
};
|
|
51
70
|
|
|
52
71
|
// --- UI Helpers ---
|
|
53
72
|
function step(text, icon = S.diamond, color = "gray") {
|
|
@@ -231,41 +250,117 @@ async function runInstall(spec) {
|
|
|
231
250
|
if (!spec) { fatal("Missing skill spec. Usage: add-skill <org/repo>"); return; }
|
|
232
251
|
const { org, repo, skill: singleSkill, ref } = parseSkillSpec(spec);
|
|
233
252
|
if (!org || !repo) { fatal("Invalid spec. Format: org/repo or org/repo#skill"); return; }
|
|
253
|
+
|
|
254
|
+
// Start Clack UI session
|
|
255
|
+
intro(c.bgCyan(c.black(" add-skill ")));
|
|
256
|
+
|
|
234
257
|
const url = `https://github.com/${org}/${repo}.git`;
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
const spinner = ora({ text: "Cloning repository", prefixText: ` ${c.gray(S.branch)} ${c.cyan(S.diamondFilled)} `, color: "cyan" }).start();
|
|
258
|
+
log.info(`Source: ${c.cyan(url)}`);
|
|
259
|
+
|
|
260
|
+
const s = spinner();
|
|
261
|
+
s.start("Cloning repository");
|
|
262
|
+
|
|
241
263
|
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "add-skill-"));
|
|
242
|
-
try {
|
|
243
|
-
|
|
264
|
+
try {
|
|
265
|
+
execSync(`git clone --depth=1 ${url} "${tmp}"`, { stdio: "pipe" });
|
|
266
|
+
if (ref) execSync(`git -C "${tmp}" checkout ${ref}`, { stdio: "pipe" });
|
|
267
|
+
} catch {
|
|
268
|
+
s.stop("Failed to clone", 1);
|
|
269
|
+
log.error("Failed to clone repository");
|
|
270
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
271
|
+
cancel("Operation cancelled");
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
s.stop("Repository cloned");
|
|
275
|
+
|
|
244
276
|
const skillsInRepo = [];
|
|
245
|
-
for (const e of fs.readdirSync(tmp)) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
277
|
+
for (const e of fs.readdirSync(tmp)) {
|
|
278
|
+
const sp = path.join(tmp, e);
|
|
279
|
+
if (fs.statSync(sp).isDirectory() && fs.existsSync(path.join(sp, "SKILL.md"))) {
|
|
280
|
+
const m = parseSkillMdFrontmatter(path.join(sp, "SKILL.md"));
|
|
281
|
+
skillsInRepo.push({
|
|
282
|
+
title: e + (m.description ? c.dim(` (${m.description.substring(0, 40)}...)`) : ""),
|
|
283
|
+
value: e,
|
|
284
|
+
selected: singleSkill ? e === singleSkill : true
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (skillsInRepo.length === 0) {
|
|
290
|
+
log.warn("No valid skills found in repository");
|
|
291
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
292
|
+
cancel("Operation cancelled");
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
log.info(`Found ${skillsInRepo.length} skills`);
|
|
297
|
+
|
|
298
|
+
// Use @clack/prompts for multiselect
|
|
299
|
+
const skillsR = await multiselect({
|
|
300
|
+
message: 'Select skills to install',
|
|
301
|
+
options: skillsInRepo.map(s => ({
|
|
302
|
+
label: s.title,
|
|
303
|
+
value: s.value,
|
|
304
|
+
hint: s.value === singleSkill ? ' (requested)' : undefined
|
|
305
|
+
})),
|
|
306
|
+
initialValues: singleSkill ? [singleSkill] : [],
|
|
307
|
+
required: true
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
if (isCancel(skillsR)) {
|
|
311
|
+
cancel('Operation cancelled.');
|
|
312
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const selectedSkills = skillsR;
|
|
317
|
+
if (selectedSkills.length === 0) {
|
|
318
|
+
log.warn("No skills selected");
|
|
319
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
320
|
+
cancel("Operation cancelled");
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
const scopeR = await select({
|
|
325
|
+
message: 'Installation scope',
|
|
326
|
+
options: [
|
|
327
|
+
{ label: 'Project (current directory)', value: 'project' },
|
|
328
|
+
{ label: 'Global', value: 'global' }
|
|
329
|
+
],
|
|
330
|
+
initialValue: 'project'
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
if (isCancel(scopeR)) {
|
|
334
|
+
cancel('Operation cancelled.');
|
|
335
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const targetScope = scopeR === "global" ? GLOBAL_DIR : WORKSPACE;
|
|
340
|
+
|
|
341
|
+
log.info("Installing skills...");
|
|
342
|
+
fs.mkdirSync(targetScope, { recursive: true });
|
|
343
|
+
|
|
344
|
+
// Install loop
|
|
345
|
+
const sInstall = spinner();
|
|
346
|
+
sInstall.start("Copying files");
|
|
347
|
+
|
|
348
|
+
for (const sn of selectedSkills) {
|
|
260
349
|
const src = path.join(tmp, sn), dest = path.join(targetScope, sn);
|
|
261
350
|
if (fs.existsSync(dest)) fs.rmSync(dest, { recursive: true, force: true });
|
|
262
351
|
fs.cpSync(src, dest, { recursive: true });
|
|
263
352
|
const hash = merkleHash(dest);
|
|
264
353
|
fs.writeFileSync(path.join(dest, ".skill-source.json"), JSON.stringify({ repo: `${org}/${repo}`, skill: sn, ref: ref || null, checksum: hash, installedAt: new Date().toISOString() }, null, 2));
|
|
265
|
-
console.log(` ${c.gray(S.branch)} ${c.green(S.check)} Installed: ${c.bold(sn)}`);
|
|
266
354
|
}
|
|
355
|
+
sInstall.stop("Files copied");
|
|
356
|
+
|
|
357
|
+
for (const sn of selectedSkills) {
|
|
358
|
+
log.success(`Installed ${c.bold(sn)}`);
|
|
359
|
+
}
|
|
360
|
+
|
|
267
361
|
fs.rmSync(tmp, { recursive: true, force: true });
|
|
268
|
-
|
|
362
|
+
|
|
363
|
+
outro("Done!");
|
|
269
364
|
}
|
|
270
365
|
|
|
271
366
|
async function runUninstall(skillName) {
|
|
@@ -310,7 +405,7 @@ function runLock() {
|
|
|
310
405
|
const m = JSON.parse(fs.readFileSync(mf, "utf-8"));
|
|
311
406
|
skills[name] = { repo: m.repo, skill: m.skill, ref: m.ref, checksum: `sha256:${m.checksum}`, publisher: m.publisher || null };
|
|
312
407
|
}
|
|
313
|
-
const lock = { lockVersion: 1, generatedAt: new Date().toISOString(), generator: `
|
|
408
|
+
const lock = { lockVersion: 1, generatedAt: new Date().toISOString(), generator: `install-agent-skill@${pkg.version}`, skills };
|
|
314
409
|
if (DRY) { step("Would generate skill-lock.json", S.diamond); outputJSON(lock); return; }
|
|
315
410
|
fs.mkdirSync(path.join(cwd, ".agent"), { recursive: true });
|
|
316
411
|
fs.writeFileSync(path.join(cwd, ".agent", "skill-lock.json"), JSON.stringify(lock, null, 2));
|
package/bin/lib/ui.js
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import kleur from "kleur";
|
|
6
|
+
import { intro, outro, spinner, multiselect, select, confirm, isCancel, cancel, text } from "@clack/prompts";
|
|
7
|
+
|
|
8
|
+
export { intro, outro, spinner, multiselect, select, confirm, isCancel, cancel, text };
|
|
6
9
|
|
|
7
10
|
// --- Symbols ---
|
|
8
11
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "install-agent-skill",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "Enterprise-grade Agent Skill Manager with Antigravity Skills support, Progressive Disclosure detection, and semantic routing validation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "DataGuruIn <contact@dataguruin.com>",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"type": "module",
|
|
16
16
|
"bin": {
|
|
17
|
-
"add-skill": "./bin/add-skill.
|
|
17
|
+
"add-skill": "./bin/add-skill.modular.js"
|
|
18
18
|
},
|
|
19
19
|
"files": [
|
|
20
20
|
"bin/",
|