playbooks 0.1.18 → 0.1.20
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 +4 -2
- package/dist/index.js +60 -5
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -268,8 +268,9 @@ Skills can be installed to any of these supported agents. Use `-g, --global` to
|
|
|
268
268
|
| Codex | `codex` | `.agents/skills/` | `~/.agents/skills/` |
|
|
269
269
|
| Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
|
|
270
270
|
| Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
|
|
271
|
+
| Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
|
|
271
272
|
| Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
|
|
272
|
-
| Cursor | `cursor` | `.
|
|
273
|
+
| Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
|
|
273
274
|
| Droid | `droid` | `.agents/skills/` | `~/.agents/skills/` |
|
|
274
275
|
| Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.agents/skills/` |
|
|
275
276
|
| GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.agents/skills/` |
|
|
@@ -297,6 +298,7 @@ Skills can be installed to any of these supported agents. Use `-g, --global` to
|
|
|
297
298
|
| Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
|
|
298
299
|
| Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
|
|
299
300
|
| Zencoder | `zencoder` | `.zencoder/skills/` | `~/.zencoder/skills/` |
|
|
301
|
+
| Universal | `universal` | `.agents/skills/` | `~/.agents/skills/` |
|
|
300
302
|
<!-- available-agents:end -->
|
|
301
303
|
|
|
302
304
|
> [!NOTE]
|
|
@@ -360,8 +362,8 @@ The CLI searches for skills in these locations within a repository:
|
|
|
360
362
|
- `.codebuddy/skills/`
|
|
361
363
|
- `.commandcode/skills/`
|
|
362
364
|
- `.continue/skills/`
|
|
365
|
+
- `.cortex/skills/`
|
|
363
366
|
- `.crush/skills/`
|
|
364
|
-
- `.cursor/skills/`
|
|
365
367
|
- `.goose/skills/`
|
|
366
368
|
- `.iflow/skills/`
|
|
367
369
|
- `.junie/skills/`
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { program } from "commander";
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "playbooks",
|
|
11
|
-
version: "0.1.
|
|
11
|
+
version: "0.1.20",
|
|
12
12
|
description: "Install agent skills, MCPs and docs into your coding agents from any git repository.",
|
|
13
13
|
type: "module",
|
|
14
14
|
bin: {
|
|
@@ -53,6 +53,7 @@ var package_default = {
|
|
|
53
53
|
"codex",
|
|
54
54
|
"command-code",
|
|
55
55
|
"continue",
|
|
56
|
+
"cortex",
|
|
56
57
|
"crush",
|
|
57
58
|
"cursor",
|
|
58
59
|
"droid",
|
|
@@ -81,7 +82,8 @@ var package_default = {
|
|
|
81
82
|
"trae",
|
|
82
83
|
"trae-cn",
|
|
83
84
|
"windsurf",
|
|
84
|
-
"zencoder"
|
|
85
|
+
"zencoder",
|
|
86
|
+
"universal"
|
|
85
87
|
],
|
|
86
88
|
homepage: "https://playbooks.com",
|
|
87
89
|
author: "",
|
|
@@ -208,6 +210,15 @@ var agents = {
|
|
|
208
210
|
return existsSync(join(process.cwd(), ".continue")) || existsSync(join(home, ".continue"));
|
|
209
211
|
}
|
|
210
212
|
},
|
|
213
|
+
cortex: {
|
|
214
|
+
name: "cortex",
|
|
215
|
+
displayName: "Cortex Code",
|
|
216
|
+
skillsDir: ".cortex/skills",
|
|
217
|
+
globalSkillsDir: join(home, ".snowflake/cortex/skills"),
|
|
218
|
+
detectInstalled: async () => {
|
|
219
|
+
return existsSync(join(home, ".snowflake/cortex"));
|
|
220
|
+
}
|
|
221
|
+
},
|
|
211
222
|
crush: {
|
|
212
223
|
name: "crush",
|
|
213
224
|
displayName: "Crush",
|
|
@@ -220,7 +231,7 @@ var agents = {
|
|
|
220
231
|
cursor: {
|
|
221
232
|
name: "cursor",
|
|
222
233
|
displayName: "Cursor",
|
|
223
|
-
skillsDir: ".
|
|
234
|
+
skillsDir: ".agents/skills",
|
|
224
235
|
globalSkillsDir: join(home, ".cursor/skills"),
|
|
225
236
|
detectInstalled: async () => existsSync(join(home, ".cursor"))
|
|
226
237
|
},
|
|
@@ -466,6 +477,14 @@ var agents = {
|
|
|
466
477
|
detectInstalled: async () => {
|
|
467
478
|
return existsSync(join(home, ".zencoder"));
|
|
468
479
|
}
|
|
480
|
+
},
|
|
481
|
+
universal: {
|
|
482
|
+
name: "universal",
|
|
483
|
+
displayName: "Universal",
|
|
484
|
+
skillsDir: ".agents/skills",
|
|
485
|
+
globalSkillsDir: universalGlobalSkillsDir,
|
|
486
|
+
showInUniversalList: false,
|
|
487
|
+
detectInstalled: async () => false
|
|
469
488
|
}
|
|
470
489
|
};
|
|
471
490
|
async function detectInstalledAgents() {
|
|
@@ -478,7 +497,9 @@ async function detectInstalledAgents() {
|
|
|
478
497
|
return results.filter((r) => r.installed).map((r) => r.type);
|
|
479
498
|
}
|
|
480
499
|
function getUniversalAgents() {
|
|
481
|
-
return Object.entries(agents).filter(
|
|
500
|
+
return Object.entries(agents).filter(
|
|
501
|
+
([_, config]) => config.skillsDir === ".agents/skills" && config.showInUniversalList !== false
|
|
502
|
+
).map(([type]) => type);
|
|
482
503
|
}
|
|
483
504
|
function getNonUniversalAgents() {
|
|
484
505
|
return Object.entries(agents).filter(([_, config]) => config.skillsDir !== ".agents/skills").map(([type]) => type);
|
|
@@ -758,6 +779,9 @@ async function parseSkillMd(skillMdPath) {
|
|
|
758
779
|
if (!data.name || !data.description) {
|
|
759
780
|
return null;
|
|
760
781
|
}
|
|
782
|
+
if (typeof data.name !== "string" || typeof data.description !== "string") {
|
|
783
|
+
return null;
|
|
784
|
+
}
|
|
761
785
|
return {
|
|
762
786
|
name: data.name,
|
|
763
787
|
description: data.description,
|
|
@@ -863,6 +887,7 @@ async function discoverSkills(basePath, subpath) {
|
|
|
863
887
|
join3(searchPath, ".codex/skills"),
|
|
864
888
|
join3(searchPath, ".commandcode/skills"),
|
|
865
889
|
join3(searchPath, ".continue/skills"),
|
|
890
|
+
join3(searchPath, ".cortex/skills"),
|
|
866
891
|
join3(searchPath, ".crush/skills"),
|
|
867
892
|
join3(searchPath, ".cursor/skills"),
|
|
868
893
|
join3(searchPath, ".factory/skills"),
|
|
@@ -7009,10 +7034,23 @@ var formatStars = (value) => {
|
|
|
7009
7034
|
}
|
|
7010
7035
|
return `${value}`;
|
|
7011
7036
|
};
|
|
7037
|
+
var formatInstalls = (value) => {
|
|
7038
|
+
if (!value || value <= 0) return "";
|
|
7039
|
+
if (value >= 1e6) {
|
|
7040
|
+
const rounded = (value / 1e6).toFixed(1).replace(/\.0$/, "");
|
|
7041
|
+
return `${rounded}M`;
|
|
7042
|
+
}
|
|
7043
|
+
if (value >= 1e3) {
|
|
7044
|
+
const rounded = (value / 1e3).toFixed(1).replace(/\.0$/, "");
|
|
7045
|
+
return `${rounded}k`;
|
|
7046
|
+
}
|
|
7047
|
+
return `${value}`;
|
|
7048
|
+
};
|
|
7012
7049
|
var buildLabel = (result) => {
|
|
7013
7050
|
const owner = result.repoOwner ?? "unknown";
|
|
7014
7051
|
const repo = result.repoName ?? "repo";
|
|
7015
7052
|
const stars = formatStars(result.stars ?? null);
|
|
7053
|
+
const installs = formatInstalls(result.installCount ?? null);
|
|
7016
7054
|
const suffixParts = [];
|
|
7017
7055
|
if (result.isOfficial) {
|
|
7018
7056
|
suffixParts.push("official");
|
|
@@ -7020,6 +7058,9 @@ var buildLabel = (result) => {
|
|
|
7020
7058
|
if (stars) {
|
|
7021
7059
|
suffixParts.push(`stars:${stars}`);
|
|
7022
7060
|
}
|
|
7061
|
+
if (installs) {
|
|
7062
|
+
suffixParts.push(`installs:${installs}`);
|
|
7063
|
+
}
|
|
7023
7064
|
const suffix = suffixParts.length > 0 ? ` ${suffixParts.join(" | ")}` : "";
|
|
7024
7065
|
return `${result.name} (${owner}/${repo})${suffix}`.trim();
|
|
7025
7066
|
};
|
|
@@ -9622,13 +9663,27 @@ function formatFindSkillMarkdown(query, outcome) {
|
|
|
9622
9663
|
continue;
|
|
9623
9664
|
}
|
|
9624
9665
|
const tag = result.isOfficial ? "[official]" : "[community]";
|
|
9625
|
-
|
|
9666
|
+
const installs = formatInstallCount(result.installCount ?? null);
|
|
9667
|
+
const installsText = installs ? ` ${installs}` : "";
|
|
9668
|
+
lines.push(`- ${tag}${installsText} npx playbooks add skill ${repo} --skill ${skillName}`);
|
|
9626
9669
|
if (description) {
|
|
9627
9670
|
lines.push(` ${truncateLine(description, 140)}`);
|
|
9628
9671
|
}
|
|
9629
9672
|
}
|
|
9630
9673
|
return lines.join("\n");
|
|
9631
9674
|
}
|
|
9675
|
+
function formatInstallCount(value) {
|
|
9676
|
+
if (!value || value <= 0) return "";
|
|
9677
|
+
if (value >= 1e6) {
|
|
9678
|
+
const rounded = (value / 1e6).toFixed(1).replace(/\.0$/, "");
|
|
9679
|
+
return `(${rounded}M installs)`;
|
|
9680
|
+
}
|
|
9681
|
+
if (value >= 1e3) {
|
|
9682
|
+
const rounded = (value / 1e3).toFixed(1).replace(/\.0$/, "");
|
|
9683
|
+
return `(${rounded}k installs)`;
|
|
9684
|
+
}
|
|
9685
|
+
return `(${value} install${value === 1 ? "" : "s"})`;
|
|
9686
|
+
}
|
|
9632
9687
|
function truncateLine(value, maxLength) {
|
|
9633
9688
|
if (value.length <= maxLength) return value;
|
|
9634
9689
|
const sliced = value.slice(0, Math.max(0, maxLength - 1)).trimEnd();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playbooks",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"description": "Install agent skills, MCPs and docs into your coding agents from any git repository.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"codex",
|
|
46
46
|
"command-code",
|
|
47
47
|
"continue",
|
|
48
|
+
"cortex",
|
|
48
49
|
"crush",
|
|
49
50
|
"cursor",
|
|
50
51
|
"droid",
|
|
@@ -73,7 +74,8 @@
|
|
|
73
74
|
"trae",
|
|
74
75
|
"trae-cn",
|
|
75
76
|
"windsurf",
|
|
76
|
-
"zencoder"
|
|
77
|
+
"zencoder",
|
|
78
|
+
"universal"
|
|
77
79
|
],
|
|
78
80
|
"homepage": "https://playbooks.com",
|
|
79
81
|
"author": "",
|