skills 1.3.6 → 1.3.8
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.md +2 -2
- package/ThirdPartyNoticeText.txt +46 -0
- package/dist/cli.mjs +43 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -210,7 +210,7 @@ Skills can be installed to any of these agents:
|
|
|
210
210
|
|-------|-----------|--------------|-------------|
|
|
211
211
|
| Amp, Kimi Code CLI, Replit | `amp`, `kimi-cli`, `replit` | `.agents/skills/` | `~/.config/agents/skills/` |
|
|
212
212
|
| Antigravity | `antigravity` | `.agent/skills/` | `~/.gemini/antigravity/skills/` |
|
|
213
|
-
| Augment | `augment` | `.augment/
|
|
213
|
+
| Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
|
|
214
214
|
| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
|
|
215
215
|
| OpenClaw | `openclaw` | `skills/` | `~/.moltbot/skills/` |
|
|
216
216
|
| Cline | `cline` | `.cline/skills/` | `~/.cline/skills/` |
|
|
@@ -316,7 +316,7 @@ The CLI searches for skills in these locations within a repository:
|
|
|
316
316
|
- `skills/.system/`
|
|
317
317
|
- `.agents/skills/`
|
|
318
318
|
- `.agent/skills/`
|
|
319
|
-
- `.augment/
|
|
319
|
+
- `.augment/skills/`
|
|
320
320
|
- `.claude/skills/`
|
|
321
321
|
- `./skills/`
|
|
322
322
|
- `.cline/skills/`
|
package/ThirdPartyNoticeText.txt
CHANGED
|
@@ -8,6 +8,23 @@ are set forth below. These licenses and notices are provided for informational p
|
|
|
8
8
|
Third Party Code Components
|
|
9
9
|
--------------------------------------------
|
|
10
10
|
|
|
11
|
+
================================================================================
|
|
12
|
+
Package: @clack/core@0.4.1
|
|
13
|
+
License: MIT
|
|
14
|
+
Repository: https://github.com/natemoo-re/clack
|
|
15
|
+
--------------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
MIT License
|
|
18
|
+
|
|
19
|
+
Copyright (c) Nate Moore
|
|
20
|
+
|
|
21
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
22
|
+
|
|
23
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
|
|
27
|
+
|
|
11
28
|
================================================================================
|
|
12
29
|
Package: @clack/prompts@0.11.0
|
|
13
30
|
License: MIT
|
|
@@ -104,6 +121,35 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
104
121
|
SOFTWARE.
|
|
105
122
|
|
|
106
123
|
|
|
124
|
+
================================================================================
|
|
125
|
+
Package: sisteransi@1.0.5
|
|
126
|
+
License: MIT
|
|
127
|
+
Repository: https://github.com/terkelg/sisteransi
|
|
128
|
+
--------------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
MIT License
|
|
131
|
+
|
|
132
|
+
Copyright (c) 2018 Terkel Gjervig Nielsen
|
|
133
|
+
|
|
134
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
135
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
136
|
+
in the Software without restriction, including without limitation the rights
|
|
137
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
138
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
139
|
+
furnished to do so, subject to the following conditions:
|
|
140
|
+
|
|
141
|
+
The above copyright notice and this permission notice shall be included in all
|
|
142
|
+
copies or substantial portions of the Software.
|
|
143
|
+
|
|
144
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
145
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
146
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
147
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
148
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
149
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
150
|
+
SOFTWARE.
|
|
151
|
+
|
|
152
|
+
|
|
107
153
|
================================================================================
|
|
108
154
|
Package: xdg-basedir@5.1.0
|
|
109
155
|
License: MIT
|
package/dist/cli.mjs
CHANGED
|
@@ -17,7 +17,7 @@ import "crypto";
|
|
|
17
17
|
import { fileURLToPath } from "url";
|
|
18
18
|
import * as readline from "readline";
|
|
19
19
|
import { Writable } from "stream";
|
|
20
|
-
import { access, cp, lstat, mkdir, mkdtemp, readFile, readdir, readlink, rm, stat, symlink, writeFile } from "fs/promises";
|
|
20
|
+
import { access, cp, lstat, mkdir, mkdtemp, readFile, readdir, readlink, realpath, rm, stat, symlink, writeFile } from "fs/promises";
|
|
21
21
|
var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
|
|
22
22
|
function getOwnerRepo(parsed) {
|
|
23
23
|
if (parsed.type === "local") return null;
|
|
@@ -117,12 +117,12 @@ function parseSource(input) {
|
|
|
117
117
|
ref
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
-
const gitlabRepoMatch = input.match(/gitlab\.com\/(
|
|
120
|
+
const gitlabRepoMatch = input.match(/gitlab\.com\/(.+?)(?:\.git)?\/?$/);
|
|
121
121
|
if (gitlabRepoMatch) {
|
|
122
|
-
const
|
|
123
|
-
return {
|
|
122
|
+
const repoPath = gitlabRepoMatch[1];
|
|
123
|
+
if (repoPath.includes("/")) return {
|
|
124
124
|
type: "gitlab",
|
|
125
|
-
url: `https://gitlab.com/${
|
|
125
|
+
url: `https://gitlab.com/${repoPath}.git`
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
128
|
const atSkillMatch = input.match(/^([^/]+)\/([^/@]+)@(.+)$/);
|
|
@@ -436,6 +436,7 @@ async function parseSkillMd(skillMdPath, options) {
|
|
|
436
436
|
const content = await readFile(skillMdPath, "utf-8");
|
|
437
437
|
const { data } = (0, import_gray_matter.default)(content);
|
|
438
438
|
if (!data.name || !data.description) return null;
|
|
439
|
+
if (typeof data.name !== "string" || typeof data.description !== "string") return null;
|
|
439
440
|
if (data.metadata?.internal === true && !shouldInstallInternalSkills() && !options?.includeInternal) return null;
|
|
440
441
|
return {
|
|
441
442
|
name: data.name,
|
|
@@ -566,8 +567,8 @@ const agents = {
|
|
|
566
567
|
augment: {
|
|
567
568
|
name: "augment",
|
|
568
569
|
displayName: "Augment",
|
|
569
|
-
skillsDir: ".augment/
|
|
570
|
-
globalSkillsDir: join(home, ".augment/
|
|
570
|
+
skillsDir: ".augment/skills",
|
|
571
|
+
globalSkillsDir: join(home, ".augment/skills"),
|
|
571
572
|
detectInstalled: async () => {
|
|
572
573
|
return existsSync(join(home, ".augment"));
|
|
573
574
|
}
|
|
@@ -938,10 +939,21 @@ async function cleanAndCreateDirectory(path) {
|
|
|
938
939
|
} catch {}
|
|
939
940
|
await mkdir(path, { recursive: true });
|
|
940
941
|
}
|
|
942
|
+
async function resolveParentSymlinks(path) {
|
|
943
|
+
const resolved = resolve(path);
|
|
944
|
+
const dir = dirname(resolved);
|
|
945
|
+
const base = basename(resolved);
|
|
946
|
+
try {
|
|
947
|
+
return join(await realpath(dir), base);
|
|
948
|
+
} catch {
|
|
949
|
+
return resolved;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
941
952
|
async function createSymlink(target, linkPath) {
|
|
942
953
|
try {
|
|
943
954
|
const resolvedTarget = resolve(target);
|
|
944
955
|
if (resolvedTarget === resolve(linkPath)) return true;
|
|
956
|
+
if (await resolveParentSymlinks(target) === await resolveParentSymlinks(linkPath)) return true;
|
|
945
957
|
try {
|
|
946
958
|
if ((await lstat(linkPath)).isSymbolicLink()) {
|
|
947
959
|
if (resolveSymlinkTarget(linkPath, await readlink(linkPath)) === resolvedTarget) return true;
|
|
@@ -954,7 +966,7 @@ async function createSymlink(target, linkPath) {
|
|
|
954
966
|
}
|
|
955
967
|
const linkDir = dirname(linkPath);
|
|
956
968
|
await mkdir(linkDir, { recursive: true });
|
|
957
|
-
await symlink(relative(linkDir, target), linkPath, platform() === "win32" ? "junction" : void 0);
|
|
969
|
+
await symlink(relative(await resolveParentSymlinks(linkDir), target), linkPath, platform() === "win32" ? "junction" : void 0);
|
|
958
970
|
return true;
|
|
959
971
|
} catch {
|
|
960
972
|
return false;
|
|
@@ -1000,6 +1012,12 @@ async function installSkillForAgent(skill, agentType, options = {}) {
|
|
|
1000
1012
|
}
|
|
1001
1013
|
await cleanAndCreateDirectory(canonicalDir);
|
|
1002
1014
|
await copyDirectory(skill.path, canonicalDir);
|
|
1015
|
+
if (isGlobal && isUniversalAgent(agentType)) return {
|
|
1016
|
+
success: true,
|
|
1017
|
+
path: canonicalDir,
|
|
1018
|
+
canonicalPath: canonicalDir,
|
|
1019
|
+
mode: "symlink"
|
|
1020
|
+
};
|
|
1003
1021
|
if (!await createSymlink(canonicalDir, agentDir)) {
|
|
1004
1022
|
await cleanAndCreateDirectory(agentDir);
|
|
1005
1023
|
await copyDirectory(skill.path, agentDir);
|
|
@@ -1117,6 +1135,12 @@ async function installRemoteSkillForAgent(skill, agentType, options = {}) {
|
|
|
1117
1135
|
}
|
|
1118
1136
|
await cleanAndCreateDirectory(canonicalDir);
|
|
1119
1137
|
await writeFile(join(canonicalDir, "SKILL.md"), skill.content, "utf-8");
|
|
1138
|
+
if (isGlobal && isUniversalAgent(agentType)) return {
|
|
1139
|
+
success: true,
|
|
1140
|
+
path: canonicalDir,
|
|
1141
|
+
canonicalPath: canonicalDir,
|
|
1142
|
+
mode: "symlink"
|
|
1143
|
+
};
|
|
1120
1144
|
if (!await createSymlink(canonicalDir, agentDir)) {
|
|
1121
1145
|
await cleanAndCreateDirectory(agentDir);
|
|
1122
1146
|
await writeFile(join(agentDir, "SKILL.md"), skill.content, "utf-8");
|
|
@@ -1192,6 +1216,12 @@ async function installWellKnownSkillForAgent(skill, agentType, options = {}) {
|
|
|
1192
1216
|
}
|
|
1193
1217
|
await cleanAndCreateDirectory(canonicalDir);
|
|
1194
1218
|
await writeSkillFiles(canonicalDir);
|
|
1219
|
+
if (isGlobal && isUniversalAgent(agentType)) return {
|
|
1220
|
+
success: true,
|
|
1221
|
+
path: canonicalDir,
|
|
1222
|
+
canonicalPath: canonicalDir,
|
|
1223
|
+
mode: "symlink"
|
|
1224
|
+
};
|
|
1195
1225
|
if (!await createSymlink(canonicalDir, agentDir)) {
|
|
1196
1226
|
await cleanAndCreateDirectory(agentDir);
|
|
1197
1227
|
await writeSkillFiles(agentDir);
|
|
@@ -1766,7 +1796,7 @@ async function saveSelectedAgents(agents) {
|
|
|
1766
1796
|
lock.lastSelectedAgents = agents;
|
|
1767
1797
|
await writeSkillLock(lock);
|
|
1768
1798
|
}
|
|
1769
|
-
var version$1 = "1.3.
|
|
1799
|
+
var version$1 = "1.3.8";
|
|
1770
1800
|
const isCancelled = (value) => typeof value === "symbol";
|
|
1771
1801
|
async function isSourcePrivate(source) {
|
|
1772
1802
|
const ownerRepo = parseOwnerRepo(source);
|
|
@@ -2104,7 +2134,7 @@ async function handleRemoteSkill(source, url, options, spinner) {
|
|
|
2104
2134
|
for (const r of failed) M.message(` ${import_picocolors.default.red("✗")} ${r.skill} → ${r.agent}: ${import_picocolors.default.dim(r.error)}`);
|
|
2105
2135
|
}
|
|
2106
2136
|
console.log();
|
|
2107
|
-
Se(import_picocolors.default.green("Done!"));
|
|
2137
|
+
Se(import_picocolors.default.green("Done!") + import_picocolors.default.dim(" Review skills before use; they run with full agent permissions."));
|
|
2108
2138
|
await promptForFindSkills(options, targetAgents);
|
|
2109
2139
|
}
|
|
2110
2140
|
async function handleWellKnownSkills(source, url, options, spinner) {
|
|
@@ -2370,7 +2400,7 @@ async function handleWellKnownSkills(source, url, options, spinner) {
|
|
|
2370
2400
|
for (const r of failed) M.message(` ${import_picocolors.default.red("✗")} ${r.skill} → ${r.agent}: ${import_picocolors.default.dim(r.error)}`);
|
|
2371
2401
|
}
|
|
2372
2402
|
console.log();
|
|
2373
|
-
Se(import_picocolors.default.green("Done!"));
|
|
2403
|
+
Se(import_picocolors.default.green("Done!") + import_picocolors.default.dim(" Review skills before use; they run with full agent permissions."));
|
|
2374
2404
|
await promptForFindSkills(options, targetAgents);
|
|
2375
2405
|
}
|
|
2376
2406
|
async function handleDirectUrlSkillLegacy(source, url, options, spinner) {
|
|
@@ -2552,7 +2582,7 @@ async function handleDirectUrlSkillLegacy(source, url, options, spinner) {
|
|
|
2552
2582
|
for (const r of failed) M.message(` ${import_picocolors.default.red("✗")} ${r.skill} → ${r.agent}: ${import_picocolors.default.dim(r.error)}`);
|
|
2553
2583
|
}
|
|
2554
2584
|
console.log();
|
|
2555
|
-
Se(import_picocolors.default.green("Done!"));
|
|
2585
|
+
Se(import_picocolors.default.green("Done!") + import_picocolors.default.dim(" Review skills before use; they run with full agent permissions."));
|
|
2556
2586
|
await promptForFindSkills(options, targetAgents);
|
|
2557
2587
|
}
|
|
2558
2588
|
async function runAdd(args, options = {}) {
|
|
@@ -2914,7 +2944,7 @@ async function runAdd(args, options = {}) {
|
|
|
2914
2944
|
for (const r of failed) M.message(` ${import_picocolors.default.red("✗")} ${r.skill} → ${r.agent}: ${import_picocolors.default.dim(r.error)}`);
|
|
2915
2945
|
}
|
|
2916
2946
|
console.log();
|
|
2917
|
-
Se(import_picocolors.default.green("Done!"));
|
|
2947
|
+
Se(import_picocolors.default.green("Done!") + import_picocolors.default.dim(" Review skills before use; they run with full agent permissions."));
|
|
2918
2948
|
await promptForFindSkills(options, targetAgents);
|
|
2919
2949
|
} catch (error) {
|
|
2920
2950
|
if (error instanceof GitCloneError) {
|