skills 1.7.0 → 1.7.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.
- package/README.md +1 -3
- package/dist/cli.mjs +27 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -290,7 +290,7 @@ Skills can be installed to any of these agents:
|
|
|
290
290
|
| IBM Bob | `bob` | `.bob/skills/` | `~/.bob/skills/` |
|
|
291
291
|
| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
|
|
292
292
|
| OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |
|
|
293
|
-
| Cline, Dexto, Kimi Code CLI, Loaf, Sarvam Code, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `sarvam-code`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |
|
|
293
|
+
| Cline, Dexto, Kimi Code CLI, Loaf, Pi, Sarvam Code, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `pi`, `sarvam-code`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |
|
|
294
294
|
| CodeArts Agent | `codearts-agent` | `.codeartsdoer/skills/` | `~/.codeartsdoer/skills/` |
|
|
295
295
|
| CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
|
|
296
296
|
| Codemaker | `codemaker` | `.codemaker/skills/` | `~/.codemaker/skills/` |
|
|
@@ -330,7 +330,6 @@ Skills can be installed to any of these agents:
|
|
|
330
330
|
| OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
|
|
331
331
|
| OpenHands | `openhands` | `.openhands/skills/` | `~/.openhands/skills/` |
|
|
332
332
|
| Ona | `ona` | `.ona/skills/` | `~/.ona/skills/` |
|
|
333
|
-
| Pi | `pi` | `.pi/skills/` | `~/.pi/agent/skills/` |
|
|
334
333
|
| Posit Assistant | `posit-assistant` | `.posit/assistant/skills/` | `~/.posit/assistant/skills/` |
|
|
335
334
|
| Qoder | `qoder` | `.qoder/skills/` | `~/.qoder/skills/` |
|
|
336
335
|
| Qoder CN | `qoder-cn` | `.qoder/skills/` | `~/.qoder-cn/skills/` |
|
|
@@ -463,7 +462,6 @@ discover `SKILL.md` files outside these container directories (e.g. under
|
|
|
463
462
|
- `.mux/skills/`
|
|
464
463
|
- `.openhands/skills/`
|
|
465
464
|
- `.ona/skills/`
|
|
466
|
-
- `.pi/skills/`
|
|
467
465
|
- `.posit/assistant/skills/`
|
|
468
466
|
- `.qoder/skills/`
|
|
469
467
|
- `.qwen/skills/`
|
package/dist/cli.mjs
CHANGED
|
@@ -1918,8 +1918,8 @@ const agents = {
|
|
|
1918
1918
|
pi: {
|
|
1919
1919
|
name: "pi",
|
|
1920
1920
|
displayName: "Pi",
|
|
1921
|
-
skillsDir: ".
|
|
1922
|
-
globalSkillsDir: join(home, ".
|
|
1921
|
+
skillsDir: ".agents/skills",
|
|
1922
|
+
globalSkillsDir: join(home, ".agents/skills"),
|
|
1923
1923
|
detectInstalled: async () => {
|
|
1924
1924
|
return existsSync(join(home, ".pi/agent"));
|
|
1925
1925
|
}
|
|
@@ -2785,8 +2785,8 @@ async function listInstalledSkills(options = {}) {
|
|
|
2785
2785
|
} catch {}
|
|
2786
2786
|
return Array.from(skillsMap.values());
|
|
2787
2787
|
}
|
|
2788
|
-
const TELEMETRY_URL = "https://
|
|
2789
|
-
const AUDIT_URL = "https://
|
|
2788
|
+
const TELEMETRY_URL = "https://www.skills.sh/tele/t";
|
|
2789
|
+
const AUDIT_URL = "https://www.skills.sh/tele/audit";
|
|
2790
2790
|
let cliVersion = null;
|
|
2791
2791
|
let detectedAgentName = null;
|
|
2792
2792
|
function setDetectedAgent(agentName) {
|
|
@@ -4172,7 +4172,7 @@ async function tryBlobInstall(ownerRepo, options = {}) {
|
|
|
4172
4172
|
tree
|
|
4173
4173
|
};
|
|
4174
4174
|
}
|
|
4175
|
-
var version$1 = "1.7.
|
|
4175
|
+
var version$1 = "1.7.1";
|
|
4176
4176
|
const NOTION_API_VERSION = "2026-03-11";
|
|
4177
4177
|
const NTN_TIMEOUT_MS = 3e4;
|
|
4178
4178
|
const NTN_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
@@ -5623,9 +5623,9 @@ async function runAdd(args, options = {}) {
|
|
|
5623
5623
|
installedSkillHashes.set(skillDisplayName, computedHash);
|
|
5624
5624
|
} catch {}
|
|
5625
5625
|
}
|
|
5626
|
-
if (successful.length > 0 && installGlobally && normalizedSource) {
|
|
5626
|
+
if (successful.length > 0 && installGlobally && (normalizedSource || parsed.type === "local" && !directDownload)) {
|
|
5627
5627
|
let cachedTree;
|
|
5628
|
-
if (parsed.type === "github" && !blobResult) cachedTree = await fetchRepoTree(normalizedSource, parsed.ref, getGitHubToken);
|
|
5628
|
+
if (parsed.type === "github" && !blobResult && normalizedSource) cachedTree = await fetchRepoTree(normalizedSource, parsed.ref, getGitHubToken);
|
|
5629
5629
|
for (const skill of selectedSkills) {
|
|
5630
5630
|
const skillDisplayName = getSkillDisplayName(skill);
|
|
5631
5631
|
if (successfulSkillNames.has(skillDisplayName)) try {
|
|
@@ -5640,9 +5640,12 @@ async function runAdd(args, options = {}) {
|
|
|
5640
5640
|
} else if (skillPathValue && tempDir) {
|
|
5641
5641
|
const hash = await computeSkillFolderHash(join(tempDir, dirname(skillPathValue)));
|
|
5642
5642
|
if (hash) skillFolderHash = hash;
|
|
5643
|
+
} else if (parsed.type === "local") {
|
|
5644
|
+
const hash = await computeSkillFolderHash(skill.path);
|
|
5645
|
+
if (hash) skillFolderHash = hash;
|
|
5643
5646
|
}
|
|
5644
5647
|
await addSkillToLock(skill.name, {
|
|
5645
|
-
source: lockSource || normalizedSource,
|
|
5648
|
+
source: lockSource || normalizedSource || parsed.url,
|
|
5646
5649
|
sourceType: parsed.type,
|
|
5647
5650
|
sourceUrl: parsed.url,
|
|
5648
5651
|
ref: parsed.ref,
|
|
@@ -6925,7 +6928,7 @@ async function removeCommand(skillNames, options) {
|
|
|
6925
6928
|
if (successful.length > 0) {
|
|
6926
6929
|
const bySource = /* @__PURE__ */ new Map();
|
|
6927
6930
|
for (const r of successful) {
|
|
6928
|
-
const source = r.source || "local";
|
|
6931
|
+
const source = r.sourceType === "local" ? "local" : r.source || "local";
|
|
6929
6932
|
const existing = bySource.get(source) || { skills: [] };
|
|
6930
6933
|
existing.skills.push(r.skill);
|
|
6931
6934
|
existing.sourceType = r.sourceType;
|
|
@@ -7545,7 +7548,7 @@ async function updateProjectSkills(options = {}) {
|
|
|
7545
7548
|
if (hasUniversal) targetParts.push("Universal");
|
|
7546
7549
|
targetParts.push(...targetAgentNames);
|
|
7547
7550
|
if (targetParts.length > 0) console.log(`${TEXT$1}Updating for: ${targetParts.join(", ")}${RESET$1}`);
|
|
7548
|
-
console.log(`${TEXT$1}
|
|
7551
|
+
console.log(`${TEXT$1}Checking ${updatable.length + wellKnownCount} skill(s)…${RESET$1}`);
|
|
7549
7552
|
console.log();
|
|
7550
7553
|
const { successCount: wkSuccessCount, failCount: wkFailCount } = await processWellKnownUpdates(wellKnownGroups, false, options);
|
|
7551
7554
|
successCount += wkSuccessCount;
|
|
@@ -7559,6 +7562,7 @@ async function updateProjectSkills(options = {}) {
|
|
|
7559
7562
|
}
|
|
7560
7563
|
const localLock = await readLocalLock();
|
|
7561
7564
|
const cliEntry = join(__dirname$1, "..", "bin", "cli.mjs");
|
|
7565
|
+
let upToDateCount = 0;
|
|
7562
7566
|
if (updatable.length > 0 && !existsSync(cliEntry)) {
|
|
7563
7567
|
console.log(`${DIM$1}✗ CLI entrypoint not found at ${cliEntry}${RESET$1}`);
|
|
7564
7568
|
return {
|
|
@@ -7576,6 +7580,7 @@ async function updateProjectSkills(options = {}) {
|
|
|
7576
7580
|
let tempDir = null;
|
|
7577
7581
|
let deletedSkills = [];
|
|
7578
7582
|
let resolvedPaths = null;
|
|
7583
|
+
const latestHashes = /* @__PURE__ */ new Map();
|
|
7579
7584
|
if (cloneSource === null) {
|
|
7580
7585
|
failCount += skillsForSource.length;
|
|
7581
7586
|
console.log(`${DIM$1}✗ Cannot update ${source}: skills-lock.json is missing sourceUrl for this generic Git source${RESET$1}`);
|
|
@@ -7593,6 +7598,10 @@ async function updateProjectSkills(options = {}) {
|
|
|
7593
7598
|
const resolution = await checkAndPromptForDeletions(source, allLockedForSource, localLock.skills, false, options, discoveredLocations);
|
|
7594
7599
|
deletedSkills = resolution.deletedSkills;
|
|
7595
7600
|
resolvedPaths = resolution.resolvedPaths;
|
|
7601
|
+
for (const [name, skillPath] of resolution.resolvedPaths) try {
|
|
7602
|
+
const hash = await computeSkillFolderHash(join(tempDir, dirname(skillPath)));
|
|
7603
|
+
if (hash) latestHashes.set(name, hash);
|
|
7604
|
+
} catch {}
|
|
7596
7605
|
} catch (error) {
|
|
7597
7606
|
console.log(`${DIM$1}✗ Failed to check for deleted skills from ${source}${RESET$1}`);
|
|
7598
7607
|
} finally {
|
|
@@ -7611,6 +7620,12 @@ async function updateProjectSkills(options = {}) {
|
|
|
7611
7620
|
...skill.entry,
|
|
7612
7621
|
skillPath: resolvedPath
|
|
7613
7622
|
} : skill.entry;
|
|
7623
|
+
const relocated = entry.skillPath !== skill.entry.skillPath;
|
|
7624
|
+
const latestHash = latestHashes.get(skill.name);
|
|
7625
|
+
if (!relocated && latestHash && latestHash === skill.entry.computedHash) {
|
|
7626
|
+
upToDateCount++;
|
|
7627
|
+
continue;
|
|
7628
|
+
}
|
|
7614
7629
|
console.log(`${TEXT$1}Updating ${safeName}…${RESET$1}`);
|
|
7615
7630
|
const installUrl = buildLocalUpdateSource(entry);
|
|
7616
7631
|
if (!installUrl) {
|
|
@@ -7647,6 +7662,8 @@ async function updateProjectSkills(options = {}) {
|
|
|
7647
7662
|
}
|
|
7648
7663
|
}
|
|
7649
7664
|
}
|
|
7665
|
+
if (upToDateCount > 0) if (upToDateCount === updatable.length && wkSuccessCount === 0 && wkFailCount === 0) console.log(`${TEXT$1}✓ All project skills are up to date${RESET$1}`);
|
|
7666
|
+
else console.log(`${DIM$1}${upToDateCount} project skill(s) already up to date${RESET$1}`);
|
|
7650
7667
|
printLegacyProjectSkills(legacy);
|
|
7651
7668
|
return {
|
|
7652
7669
|
successCount,
|