@dragonbot-skills/cli 0.2.0 → 0.3.0
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/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/cowork-plugin.js +176 -0
- package/dist/cowork-plugin.js.map +1 -0
- package/dist/install.js +94 -37
- package/dist/install.js.map +1 -1
- package/dist/platforms.js +66 -34
- package/dist/platforms.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -83,7 +83,7 @@ function runListPlatforms() {
|
|
|
83
83
|
const idWidth = Math.max(...PLATFORM_REGISTRY.map((p) => p.id.length));
|
|
84
84
|
for (const p of PLATFORM_REGISTRY) {
|
|
85
85
|
const tag = detected.has(p.id) ? "✓ detected" : " (not detected)";
|
|
86
|
-
process.stdout.write(` ${p.id.padEnd(idWidth, " ")} ${tag} ${p.label} → ${p.
|
|
86
|
+
process.stdout.write(` ${p.id.padEnd(idWidth, " ")} ${tag} ${p.label} → ${p.skillsRoot(env)}\n`);
|
|
87
87
|
}
|
|
88
88
|
process.stdout.write("\nDefault install targets every detected platform. Override with " +
|
|
89
89
|
"--target <id>[,<id>...] or --dir <path>.\n");
|
|
@@ -122,7 +122,7 @@ function runInstall(rest) {
|
|
|
122
122
|
// Preview the destinations before doing the work. If nothing was
|
|
123
123
|
// detected and the user didn't override, explain it before
|
|
124
124
|
// throwing — much nicer than a wall of text from the thrown error.
|
|
125
|
-
const previewDests = resolveDestinations({ targets, dir: flags.dir });
|
|
125
|
+
const previewDests = resolveDestinations({ slug, targets, dir: flags.dir });
|
|
126
126
|
if (previewDests.length === 0) {
|
|
127
127
|
process.stderr.write("No supported AI coding platforms were detected on this machine.\n" +
|
|
128
128
|
"Pass --target <id> (see `dragonbot-skills list-platforms`) or " +
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Cowork / Claude Desktop "plugin bundle" installer.
|
|
2
|
+
//
|
|
3
|
+
// Cowork and Claude Desktop don't load skills from ~/.claude/skills/.
|
|
4
|
+
// They load them from a per-app plugin tree under:
|
|
5
|
+
//
|
|
6
|
+
// ~/Library/Application Support/<App>/local-agent-mode-sessions/skills-plugin/
|
|
7
|
+
// <plugin-uuid>/<snapshot-uuid>/
|
|
8
|
+
// .claude-plugin/plugin.json {name, version, description}
|
|
9
|
+
// manifest.json {lastUpdated, skills: [...]}
|
|
10
|
+
// skills/<slug>/SKILL.md (+ nested files)
|
|
11
|
+
//
|
|
12
|
+
// Each "plugin" is a bundle of one or more skills. We ship our
|
|
13
|
+
// catalog as a single bundle named "dragonbot-skills". The UUIDs in
|
|
14
|
+
// the path are hardcoded so subsequent installs (and --force
|
|
15
|
+
// reinstalls) land in the same directory, and the manifest is
|
|
16
|
+
// merged across calls so `install amazon-kw-research` followed by
|
|
17
|
+
// `install other-skill` ends up with both listed under the same
|
|
18
|
+
// plugin.
|
|
19
|
+
//
|
|
20
|
+
// Unknowns we accept:
|
|
21
|
+
// - Cowork's docs don't describe a user-installable plugin path;
|
|
22
|
+
// this layout is reverse-engineered from the Anthropic-managed
|
|
23
|
+
// skills bundle that ships with the app. It may not load until
|
|
24
|
+
// Cowork is restarted, and could in theory be wiped on resync.
|
|
25
|
+
// Mark this installer as best-effort in the README.
|
|
26
|
+
import fs from "node:fs";
|
|
27
|
+
import path from "node:path";
|
|
28
|
+
// Bundle identity. Stable forever for this package — same on every
|
|
29
|
+
// machine, so reinstalls find the right directory.
|
|
30
|
+
//
|
|
31
|
+
// Generated with crypto.randomUUID(); not derived from the package
|
|
32
|
+
// name. If we ever ship multiple plugin bundles, give each its own
|
|
33
|
+
// pair of UUIDs.
|
|
34
|
+
export const DRAGONBOT_PLUGIN_UUID = "d4a900b1-7e3f-4b8a-9c1d-2e3f4a5b6c7d";
|
|
35
|
+
export const DRAGONBOT_SNAPSHOT_UUID = "f1e2d3c4-5b6a-7c80-9d12-3456789abcde";
|
|
36
|
+
export const PLUGIN_NAME = "dragonbot-skills";
|
|
37
|
+
export const PLUGIN_DESCRIPTION = "Amazon analytics + ops skills for Claude (DragonBot catalog).";
|
|
38
|
+
const APP_SUBDIRS = {
|
|
39
|
+
// Both apps live under ~/Library/Application Support on macOS.
|
|
40
|
+
// Claude is the consumer Desktop app, Claude-Work is Cowork.
|
|
41
|
+
"claude-desktop": "Claude",
|
|
42
|
+
cowork: "Claude-Work",
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Absolute path to the app-specific plugin bundle directory for our
|
|
46
|
+
* plugin. Doesn't check whether the dir exists yet.
|
|
47
|
+
*/
|
|
48
|
+
export function bundleDir(app, env) {
|
|
49
|
+
return path.join(env.home, "Library", "Application Support", APP_SUBDIRS[app], "local-agent-mode-sessions", "skills-plugin", DRAGONBOT_PLUGIN_UUID, DRAGONBOT_SNAPSHOT_UUID);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Path to the parent "skills-plugin" dir for an app. Used by the
|
|
53
|
+
* detect() probe — if this dir exists, the app is installed and
|
|
54
|
+
* supports plugin-style skills.
|
|
55
|
+
*/
|
|
56
|
+
export function appPluginRoot(app, env) {
|
|
57
|
+
return path.join(env.home, "Library", "Application Support", APP_SUBDIRS[app], "local-agent-mode-sessions", "skills-plugin");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Install a single skill into the Cowork/Claude-Desktop plugin
|
|
61
|
+
* bundle for `app`. Atomic-ish: stages the new skill folder under a
|
|
62
|
+
* tmp name and renames into place. The manifest is updated in
|
|
63
|
+
* place — read, splice/replace the entry for `slug`, write back.
|
|
64
|
+
*
|
|
65
|
+
* `pluginVersion` becomes the `version` field in plugin.json. Bump
|
|
66
|
+
* it when our skill content changes so Cowork can detect updates;
|
|
67
|
+
* we default to the CLI's own package version.
|
|
68
|
+
*/
|
|
69
|
+
export function installToCowork(args) {
|
|
70
|
+
const dir = bundleDir(args.app, args.env);
|
|
71
|
+
const skillsDir = path.join(dir, "skills");
|
|
72
|
+
const skillDest = path.join(skillsDir, args.slug);
|
|
73
|
+
if (fs.existsSync(skillDest) && !args.force) {
|
|
74
|
+
return {
|
|
75
|
+
installed: false,
|
|
76
|
+
bundlePath: skillDest,
|
|
77
|
+
reason: "destination exists; pass --force to overwrite",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
81
|
+
// Write/refresh plugin.json — cheap, ensures version bumps land.
|
|
82
|
+
const pluginJsonDir = path.join(dir, ".claude-plugin");
|
|
83
|
+
fs.mkdirSync(pluginJsonDir, { recursive: true });
|
|
84
|
+
fs.writeFileSync(path.join(pluginJsonDir, "plugin.json"), JSON.stringify({ name: PLUGIN_NAME, version: args.pluginVersion, description: PLUGIN_DESCRIPTION }, null, 2) + "\n");
|
|
85
|
+
// Copy skill folder atomically.
|
|
86
|
+
if (fs.existsSync(skillDest)) {
|
|
87
|
+
fs.rmSync(skillDest, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
const staging = fs.mkdtempSync(path.join(skillsDir, `.${args.slug}-staging-`));
|
|
90
|
+
try {
|
|
91
|
+
copyDirRecursive(args.srcSkillDir, staging);
|
|
92
|
+
fs.renameSync(staging, skillDest);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
fs.rmSync(staging, { recursive: true, force: true });
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
98
|
+
// Merge into manifest.
|
|
99
|
+
const manifestPath = path.join(dir, "manifest.json");
|
|
100
|
+
const manifest = readManifest(manifestPath);
|
|
101
|
+
upsertSkill(manifest, {
|
|
102
|
+
skillId: args.slug,
|
|
103
|
+
name: args.name,
|
|
104
|
+
description: args.description,
|
|
105
|
+
creatorType: "third-party",
|
|
106
|
+
updatedAt: new Date().toISOString(),
|
|
107
|
+
enabled: true,
|
|
108
|
+
});
|
|
109
|
+
manifest.lastUpdated = Date.now();
|
|
110
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
111
|
+
return { installed: true, bundlePath: skillDest };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Remove a single skill from the bundle. If it was the last skill,
|
|
115
|
+
* removes the whole plugin directory so we don't leave an empty
|
|
116
|
+
* plugin advertised in Cowork's plugin list.
|
|
117
|
+
*/
|
|
118
|
+
export function uninstallFromCowork(args) {
|
|
119
|
+
const dir = bundleDir(args.app, args.env);
|
|
120
|
+
const skillDest = path.join(dir, "skills", args.slug);
|
|
121
|
+
if (!fs.existsSync(skillDest)) {
|
|
122
|
+
return { removed: false, bundlePath: skillDest };
|
|
123
|
+
}
|
|
124
|
+
fs.rmSync(skillDest, { recursive: true, force: true });
|
|
125
|
+
const manifestPath = path.join(dir, "manifest.json");
|
|
126
|
+
const manifest = readManifest(manifestPath);
|
|
127
|
+
manifest.skills = manifest.skills.filter((s) => s.skillId !== args.slug);
|
|
128
|
+
manifest.lastUpdated = Date.now();
|
|
129
|
+
if (manifest.skills.length === 0) {
|
|
130
|
+
// Last skill — wipe the whole plugin dir so Cowork doesn't
|
|
131
|
+
// load an empty bundle.
|
|
132
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
136
|
+
}
|
|
137
|
+
return { removed: true, bundlePath: skillDest };
|
|
138
|
+
}
|
|
139
|
+
function readManifest(p) {
|
|
140
|
+
if (!fs.existsSync(p)) {
|
|
141
|
+
return { lastUpdated: Date.now(), skills: [] };
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const parsed = JSON.parse(fs.readFileSync(p, "utf8"));
|
|
145
|
+
// Be lenient — start fresh if the existing file is garbled
|
|
146
|
+
// rather than crashing the user mid-install.
|
|
147
|
+
if (typeof parsed !== "object" || !Array.isArray(parsed.skills)) {
|
|
148
|
+
return { lastUpdated: Date.now(), skills: [] };
|
|
149
|
+
}
|
|
150
|
+
return parsed;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return { lastUpdated: Date.now(), skills: [] };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function upsertSkill(manifest, entry) {
|
|
157
|
+
const i = manifest.skills.findIndex((s) => s.skillId === entry.skillId);
|
|
158
|
+
if (i < 0)
|
|
159
|
+
manifest.skills.push(entry);
|
|
160
|
+
else
|
|
161
|
+
manifest.skills[i] = entry;
|
|
162
|
+
}
|
|
163
|
+
function copyDirRecursive(src, dest) {
|
|
164
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
165
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
166
|
+
const s = path.join(src, entry.name);
|
|
167
|
+
const d = path.join(dest, entry.name);
|
|
168
|
+
if (entry.isDirectory()) {
|
|
169
|
+
copyDirRecursive(s, d);
|
|
170
|
+
}
|
|
171
|
+
else if (entry.isFile()) {
|
|
172
|
+
fs.copyFileSync(s, d);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=cowork-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cowork-plugin.js","sourceRoot":"","sources":["../src/cowork-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/install.js
CHANGED
|
@@ -1,38 +1,42 @@
|
|
|
1
1
|
// Install / uninstall skills across one or more AI-coding platforms.
|
|
2
2
|
//
|
|
3
3
|
// Default behavior (no --target): auto-detect every installed
|
|
4
|
-
// platform
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// platform and write the skill to each one. Most platforms get the
|
|
5
|
+
// simple "<skillsRoot>/<slug>/" copy; Cowork and Claude Desktop go
|
|
6
|
+
// through their plugin-bundle installer (writes .claude-plugin/
|
|
7
|
+
// plugin.json + manifest.json + skills/<slug>/) instead.
|
|
7
8
|
//
|
|
8
9
|
// Override with `--target claude-code,cursor` (specific platforms)
|
|
9
|
-
// or `--dir <path>` (raw directory
|
|
10
|
-
//
|
|
10
|
+
// or `--dir <path>` (raw directory). `--dir` always uses the simple
|
|
11
|
+
// copy; the plugin-bundle installer is reachable only via the
|
|
12
|
+
// `cowork` / `claude-desktop` platform ids.
|
|
11
13
|
//
|
|
12
|
-
// Each install is atomic-ish: copy to a staging dir next
|
|
13
|
-
// destination, then rename.
|
|
14
|
-
//
|
|
14
|
+
// Each standard install is atomic-ish: copy to a staging dir next
|
|
15
|
+
// to the destination, then rename. Custom installers handle their
|
|
16
|
+
// own atomicity (see src/cowork-plugin.ts).
|
|
15
17
|
import fs from "node:fs";
|
|
16
18
|
import path from "node:path";
|
|
17
|
-
import {
|
|
19
|
+
import { fileURLToPath } from "node:url";
|
|
20
|
+
import { findBundledSkill, listBundledSkills } from "./skills.js";
|
|
18
21
|
import { detectAllPlatforms, realEnv, } from "./platforms.js";
|
|
19
|
-
/**
|
|
20
|
-
* Resolve the list of destinations for an install call. Single
|
|
21
|
-
* function so the CLI can show "what would I install where" in
|
|
22
|
-
* --dry-run mode without duplicating the resolution logic.
|
|
23
|
-
*/
|
|
22
|
+
/** Resolve where install() will write, given the user's flags. */
|
|
24
23
|
export function resolveDestinations(opts) {
|
|
25
24
|
const env = opts.env ?? realEnv();
|
|
26
25
|
if (opts.dir) {
|
|
27
26
|
return [
|
|
28
|
-
{
|
|
27
|
+
{
|
|
28
|
+
platform: "custom",
|
|
29
|
+
label: "Custom directory",
|
|
30
|
+
skillPath: path.join(path.resolve(opts.dir), opts.slug),
|
|
31
|
+
},
|
|
29
32
|
];
|
|
30
33
|
}
|
|
31
34
|
const platforms = opts.targets ?? detectAllPlatforms(env);
|
|
32
35
|
return platforms.map((p) => ({
|
|
33
36
|
platform: p.id,
|
|
34
37
|
label: p.label,
|
|
35
|
-
|
|
38
|
+
skillPath: path.join(p.skillsRoot(env), opts.slug),
|
|
39
|
+
entry: p,
|
|
36
40
|
}));
|
|
37
41
|
}
|
|
38
42
|
export function install(opts) {
|
|
@@ -41,10 +45,12 @@ export function install(opts) {
|
|
|
41
45
|
throw new Error(`Skill not found in this package: ${opts.slug}\n` +
|
|
42
46
|
`Run \`dragonbot-skills list\` to see what's available.`);
|
|
43
47
|
}
|
|
48
|
+
const env = opts.env ?? realEnv();
|
|
44
49
|
const destinations = resolveDestinations({
|
|
50
|
+
slug: opts.slug,
|
|
45
51
|
targets: opts.targets,
|
|
46
52
|
dir: opts.dir,
|
|
47
|
-
env
|
|
53
|
+
env,
|
|
48
54
|
});
|
|
49
55
|
if (destinations.length === 0) {
|
|
50
56
|
throw new Error("No install destinations resolved. None of the supported AI " +
|
|
@@ -53,19 +59,44 @@ export function install(opts) {
|
|
|
53
59
|
"`dragonbot-skills list-platforms`) or --dir <path> to " +
|
|
54
60
|
"install anyway.");
|
|
55
61
|
}
|
|
62
|
+
const skillMeta = listBundledSkills(opts.bundledRoot).find((s) => s.slug === opts.slug);
|
|
63
|
+
const skillName = skillMeta?.name ?? opts.slug;
|
|
64
|
+
const skillDescription = skillMeta?.description ?? "";
|
|
65
|
+
const pluginVersion = opts.packageVersion ?? detectPackageVersion();
|
|
56
66
|
const entries = [];
|
|
57
67
|
for (const dest of destinations) {
|
|
58
|
-
|
|
68
|
+
if (opts.dryRun) {
|
|
69
|
+
entries.push({
|
|
70
|
+
platform: dest.platform,
|
|
71
|
+
label: dest.label,
|
|
72
|
+
installedTo: dest.skillPath,
|
|
73
|
+
status: "would-install",
|
|
74
|
+
});
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Custom installer (Cowork / Claude Desktop plugin bundle).
|
|
78
|
+
if (dest.entry?.customInstaller) {
|
|
79
|
+
const result = dest.entry.customInstaller.install({
|
|
80
|
+
env,
|
|
81
|
+
srcSkillDir: src,
|
|
82
|
+
slug: opts.slug,
|
|
83
|
+
name: skillName,
|
|
84
|
+
description: skillDescription,
|
|
85
|
+
pluginVersion,
|
|
86
|
+
force: opts.force,
|
|
87
|
+
});
|
|
88
|
+
entries.push({
|
|
89
|
+
platform: dest.platform,
|
|
90
|
+
label: dest.label,
|
|
91
|
+
installedTo: result.installedTo,
|
|
92
|
+
status: result.status,
|
|
93
|
+
reason: result.reason,
|
|
94
|
+
});
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// Standard "<dir>/<slug>" copy.
|
|
59
98
|
try {
|
|
60
|
-
|
|
61
|
-
entries.push({
|
|
62
|
-
platform: dest.platform,
|
|
63
|
-
label: dest.label,
|
|
64
|
-
installedTo,
|
|
65
|
-
status: "would-install",
|
|
66
|
-
});
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
99
|
+
const installedTo = dest.skillPath;
|
|
69
100
|
if (fs.existsSync(installedTo)) {
|
|
70
101
|
if (!opts.force) {
|
|
71
102
|
entries.push({
|
|
@@ -79,8 +110,9 @@ export function install(opts) {
|
|
|
79
110
|
}
|
|
80
111
|
fs.rmSync(installedTo, { recursive: true, force: true });
|
|
81
112
|
}
|
|
82
|
-
|
|
83
|
-
|
|
113
|
+
const parentDir = path.dirname(installedTo);
|
|
114
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
115
|
+
copyIntoPlace(src, installedTo, opts.slug, parentDir);
|
|
84
116
|
entries.push({
|
|
85
117
|
platform: dest.platform,
|
|
86
118
|
label: dest.label,
|
|
@@ -92,7 +124,7 @@ export function install(opts) {
|
|
|
92
124
|
entries.push({
|
|
93
125
|
platform: dest.platform,
|
|
94
126
|
label: dest.label,
|
|
95
|
-
installedTo,
|
|
127
|
+
installedTo: dest.skillPath,
|
|
96
128
|
status: "error",
|
|
97
129
|
reason: err.message,
|
|
98
130
|
});
|
|
@@ -101,14 +133,26 @@ export function install(opts) {
|
|
|
101
133
|
return { slug: opts.slug, entries };
|
|
102
134
|
}
|
|
103
135
|
export function uninstall(opts) {
|
|
136
|
+
const env = opts.env ?? realEnv();
|
|
104
137
|
const destinations = resolveDestinations({
|
|
138
|
+
slug: opts.slug,
|
|
105
139
|
targets: opts.targets,
|
|
106
140
|
dir: opts.dir,
|
|
107
|
-
env
|
|
141
|
+
env,
|
|
108
142
|
});
|
|
109
143
|
const entries = [];
|
|
110
144
|
for (const dest of destinations) {
|
|
111
|
-
|
|
145
|
+
if (dest.entry?.customInstaller) {
|
|
146
|
+
const result = dest.entry.customInstaller.uninstall({ env, slug: opts.slug });
|
|
147
|
+
entries.push({
|
|
148
|
+
platform: dest.platform,
|
|
149
|
+
label: dest.label,
|
|
150
|
+
path: result.path,
|
|
151
|
+
removed: result.removed,
|
|
152
|
+
});
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const target = dest.skillPath;
|
|
112
156
|
if (!fs.existsSync(target)) {
|
|
113
157
|
entries.push({ platform: dest.platform, label: dest.label, path: target, removed: false });
|
|
114
158
|
continue;
|
|
@@ -118,8 +162,7 @@ export function uninstall(opts) {
|
|
|
118
162
|
}
|
|
119
163
|
return { slug: opts.slug, entries };
|
|
120
164
|
}
|
|
121
|
-
// Stage in a sibling tmp dir, then rename.
|
|
122
|
-
// copied skill folder behind if the copy is interrupted.
|
|
165
|
+
// Stage in a sibling tmp dir, then rename.
|
|
123
166
|
function copyIntoPlace(src, dest, slug, parent) {
|
|
124
167
|
const staging = fs.mkdtempSync(path.join(parent, `.${slug}-staging-`));
|
|
125
168
|
try {
|
|
@@ -142,9 +185,23 @@ function copyDirRecursive(src, dest) {
|
|
|
142
185
|
else if (entry.isFile()) {
|
|
143
186
|
fs.copyFileSync(s, d);
|
|
144
187
|
}
|
|
145
|
-
// Symlinks + special files: skip silently.
|
|
146
188
|
}
|
|
147
189
|
}
|
|
148
|
-
/**
|
|
149
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Read our own package.json's `version` field. Used as the
|
|
192
|
+
* `plugin.json` version when installing into Cowork/Desktop plugin
|
|
193
|
+
* bundles, so Cowork can see updates as we bump the CLI.
|
|
194
|
+
*/
|
|
195
|
+
function detectPackageVersion() {
|
|
196
|
+
try {
|
|
197
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
198
|
+
const pkg = JSON.parse(fs.readFileSync(path.resolve(here, "..", "package.json"), "utf8"));
|
|
199
|
+
return pkg.version ?? "0.0.0";
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return "0.0.0";
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/** Re-exports so the CLI doesn't have to import from two modules. */
|
|
206
|
+
export { parsePlatformIds, detectAllPlatforms, getPlatform, } from "./platforms.js";
|
|
150
207
|
//# sourceMappingURL=install.js.map
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8DAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8DAA8D;AAC9D,mEAAmE;AACnE,mEAAmE;AACnE,gEAAgE;AAChE,yDAAyD;AACzD,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,8DAA8D;AAC9D,4CAA4C;AAC5C,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,4CAA4C;AAE5C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,OAAO,GAGR,MAAM,gBAAgB,CAAC;AAwCxB,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,IAKnC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO;YACL;gBACE,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,kBAAkB;gBACzB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;aACxD;SACF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAClD,KAAK,EAAE,CAAC;KACT,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAiB;IACvC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,IAAI,IAAI;YAC/C,wDAAwD,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,mBAAmB,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG;KACJ,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,uDAAuD;YACvD,oDAAoD;YACpD,wDAAwD;YACxD,iBAAiB,CACpB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAC5B,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IAC/C,MAAM,gBAAgB,GAAG,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,oBAAoB,EAAE,CAAC;IAEpE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,SAAS;gBAC3B,MAAM,EAAE,eAAe;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,4DAA4D;QAC5D,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;gBAChD,GAAG;gBACH,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,gBAAgB;gBAC7B,aAAa;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC;wBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,WAAW;wBACX,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,+CAA+C;qBACxD,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC5C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW;gBACX,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,SAAS;gBAC3B,MAAM,EAAE,OAAO;gBACf,MAAM,EAAG,GAAa,CAAC,OAAO;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAqBD,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,mBAAmB,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3F,SAAS;QACX,CAAC;QACD,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,2CAA2C;AAC3C,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc;IAC5E,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC1C,CAAC;QAC1B,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
|
package/dist/platforms.js
CHANGED
|
@@ -1,40 +1,82 @@
|
|
|
1
|
-
// Registry of supported AI coding platforms — each entry knows
|
|
2
|
-
// to drop
|
|
3
|
-
// on this machine.
|
|
1
|
+
// Registry of supported AI coding platforms — each entry knows
|
|
2
|
+
// where to drop a skill folder and how to tell whether the platform
|
|
3
|
+
// is installed on this machine.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
// (
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
5
|
+
// Most platforms use the simple "<dir>/<slug>/SKILL.md" convention
|
|
6
|
+
// (Claude Code, Cursor, Codex, etc.). A few use richer formats —
|
|
7
|
+
// notably Cowork and Claude Desktop, which load skills as plugin
|
|
8
|
+
// bundles (.claude-plugin/plugin.json + manifest.json + skills/<slug>).
|
|
9
|
+
// For those, the entry carries a `customInstaller` callback that
|
|
10
|
+
// owns the full install/uninstall flow.
|
|
10
11
|
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
12
|
+
// Standard-platform layout adapted from skills-hub.ai's
|
|
13
|
+
// @skills-hub-ai/cli (MIT). They pioneered the auto-detect-and-
|
|
14
|
+
// install-everywhere UX for Claude-style skills.
|
|
14
15
|
import fs from "node:fs";
|
|
15
16
|
import path from "node:path";
|
|
16
17
|
import os from "node:os";
|
|
18
|
+
import { installToCowork, uninstallFromCowork, appPluginRoot, bundleDir, } from "./cowork-plugin.js";
|
|
17
19
|
export function realEnv() {
|
|
18
20
|
return { home: os.homedir(), cwd: process.cwd() };
|
|
19
21
|
}
|
|
20
22
|
const has = (...segments) => fs.existsSync(path.join(...segments));
|
|
23
|
+
const coworkInstaller = (app) => ({
|
|
24
|
+
install: (args) => {
|
|
25
|
+
try {
|
|
26
|
+
const result = installToCowork({ app, ...args });
|
|
27
|
+
return {
|
|
28
|
+
installedTo: result.bundlePath,
|
|
29
|
+
status: result.installed ? "installed" : "skipped-exists",
|
|
30
|
+
reason: result.reason,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return {
|
|
35
|
+
installedTo: path.join(bundleDir(app, args.env), "skills", args.slug),
|
|
36
|
+
status: "error",
|
|
37
|
+
reason: err.message,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
uninstall: (args) => {
|
|
42
|
+
const result = uninstallFromCowork({ app, ...args });
|
|
43
|
+
return { path: result.bundlePath, removed: result.removed };
|
|
44
|
+
},
|
|
45
|
+
});
|
|
21
46
|
export const PLATFORM_REGISTRY = [
|
|
22
47
|
{
|
|
23
48
|
id: "claude-code",
|
|
24
49
|
label: "Claude Code",
|
|
25
|
-
|
|
50
|
+
skillsRoot: (e) => path.join(e.home, ".claude", "skills"),
|
|
26
51
|
detect: (e) => has(e.home, ".claude"),
|
|
27
52
|
},
|
|
53
|
+
{
|
|
54
|
+
id: "claude-desktop",
|
|
55
|
+
label: "Claude Desktop",
|
|
56
|
+
// Custom installer writes the plugin bundle; the "skillsRoot"
|
|
57
|
+
// we expose for list-platforms / dry-run is the bundle's
|
|
58
|
+
// skills/ subdir.
|
|
59
|
+
skillsRoot: (e) => path.join(bundleDir("claude-desktop", e), "skills"),
|
|
60
|
+
detect: (e) => fs.existsSync(appPluginRoot("claude-desktop", e)),
|
|
61
|
+
customInstaller: coworkInstaller("claude-desktop"),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: "cowork",
|
|
65
|
+
label: "Claude Cowork",
|
|
66
|
+
skillsRoot: (e) => path.join(bundleDir("cowork", e), "skills"),
|
|
67
|
+
detect: (e) => fs.existsSync(appPluginRoot("cowork", e)),
|
|
68
|
+
customInstaller: coworkInstaller("cowork"),
|
|
69
|
+
},
|
|
28
70
|
{
|
|
29
71
|
id: "cursor",
|
|
30
72
|
label: "Cursor",
|
|
31
|
-
|
|
73
|
+
skillsRoot: (e) => path.join(e.home, ".cursor", "skills"),
|
|
32
74
|
detect: (e) => has(e.home, ".cursor"),
|
|
33
75
|
},
|
|
34
76
|
{
|
|
35
77
|
id: "codex",
|
|
36
78
|
label: "Codex CLI",
|
|
37
|
-
|
|
79
|
+
skillsRoot: (e) => path.join(e.home, ".codex", "skills"),
|
|
38
80
|
detect: (e) => has(e.home, ".codex"),
|
|
39
81
|
},
|
|
40
82
|
{
|
|
@@ -44,26 +86,26 @@ export const PLATFORM_REGISTRY = [
|
|
|
44
86
|
// we drop per-skill folders under .github/copilot/skills/ so the
|
|
45
87
|
// user can opt them in via custom instructions without colliding
|
|
46
88
|
// with the single documented file.
|
|
47
|
-
|
|
89
|
+
skillsRoot: (e) => path.join(e.cwd, ".github", "copilot", "skills"),
|
|
48
90
|
detect: (e) => has(e.cwd, ".github", "copilot") ||
|
|
49
91
|
has(e.cwd, ".github", "copilot-instructions.md"),
|
|
50
92
|
},
|
|
51
93
|
{
|
|
52
94
|
id: "windsurf",
|
|
53
95
|
label: "Windsurf",
|
|
54
|
-
|
|
96
|
+
skillsRoot: (e) => path.join(e.home, ".windsurf", "skills"),
|
|
55
97
|
detect: (e) => has(e.home, ".windsurf") || has(e.cwd, ".windsurfrules"),
|
|
56
98
|
},
|
|
57
99
|
{
|
|
58
100
|
id: "cline",
|
|
59
101
|
label: "Cline",
|
|
60
|
-
|
|
102
|
+
skillsRoot: (e) => path.join(e.home, ".cline", "skills"),
|
|
61
103
|
detect: (e) => has(e.home, ".cline") || has(e.cwd, ".clinerules"),
|
|
62
104
|
},
|
|
63
105
|
{
|
|
64
106
|
id: "opencode",
|
|
65
107
|
label: "OpenCode",
|
|
66
|
-
|
|
108
|
+
skillsRoot: (e) => path.join(e.home, ".opencode", "skills"),
|
|
67
109
|
detect: (e) => has(e.home, ".opencode"),
|
|
68
110
|
},
|
|
69
111
|
{
|
|
@@ -71,7 +113,7 @@ export const PLATFORM_REGISTRY = [
|
|
|
71
113
|
label: "Continue",
|
|
72
114
|
// Best-effort: Continue uses ~/.continue/config.json; the skills
|
|
73
115
|
// subdir is not yet a documented loader location.
|
|
74
|
-
|
|
116
|
+
skillsRoot: (e) => path.join(e.home, ".continue", "skills"),
|
|
75
117
|
detect: (e) => has(e.home, ".continue"),
|
|
76
118
|
},
|
|
77
119
|
{
|
|
@@ -79,13 +121,13 @@ export const PLATFORM_REGISTRY = [
|
|
|
79
121
|
label: "Gemini CLI",
|
|
80
122
|
// Best-effort: ~/.gemini is the published config root; the
|
|
81
123
|
// skills subdir is not (yet) documented.
|
|
82
|
-
|
|
124
|
+
skillsRoot: (e) => path.join(e.home, ".gemini", "skills"),
|
|
83
125
|
detect: (e) => has(e.home, ".gemini"),
|
|
84
126
|
},
|
|
85
127
|
{
|
|
86
128
|
id: "roo",
|
|
87
129
|
label: "Roo Code",
|
|
88
|
-
|
|
130
|
+
skillsRoot: (e) => path.join(e.home, ".roo", "skills"),
|
|
89
131
|
detect: (e) => has(e.home, ".roo") || has(e.cwd, ".roorules"),
|
|
90
132
|
},
|
|
91
133
|
{
|
|
@@ -93,11 +135,11 @@ export const PLATFORM_REGISTRY = [
|
|
|
93
135
|
label: "Zed",
|
|
94
136
|
// macOS uses ~/Library/Application Support/Zed; Linux uses
|
|
95
137
|
// ~/.config/zed. We pick per-platform at call time.
|
|
96
|
-
|
|
97
|
-
detect: (e) => fs.existsSync(path.dirname(
|
|
138
|
+
skillsRoot: (e) => zedSkillsRoot(e.home),
|
|
139
|
+
detect: (e) => fs.existsSync(path.dirname(zedSkillsRoot(e.home))),
|
|
98
140
|
},
|
|
99
141
|
];
|
|
100
|
-
function
|
|
142
|
+
function zedSkillsRoot(home) {
|
|
101
143
|
if (os.platform() === "darwin") {
|
|
102
144
|
return path.join(home, "Library", "Application Support", "Zed", "skills");
|
|
103
145
|
}
|
|
@@ -107,19 +149,9 @@ export const ALL_PLATFORM_IDS = PLATFORM_REGISTRY.map((p) => p.id);
|
|
|
107
149
|
export function getPlatform(id) {
|
|
108
150
|
return PLATFORM_REGISTRY.find((p) => p.id === id);
|
|
109
151
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Return every platform that appears to be installed on this
|
|
112
|
-
* machine. Order matches registry order, so Claude Code comes first
|
|
113
|
-
* when multiple are present.
|
|
114
|
-
*/
|
|
115
152
|
export function detectAllPlatforms(env = realEnv()) {
|
|
116
153
|
return PLATFORM_REGISTRY.filter((p) => p.detect(env));
|
|
117
154
|
}
|
|
118
|
-
/**
|
|
119
|
-
* Parse a comma-separated list of platform IDs from the CLI's
|
|
120
|
-
* --target flag. Splits into known + unknown so the caller can warn
|
|
121
|
-
* the user about typos without silently dropping them.
|
|
122
|
-
*/
|
|
123
155
|
export function parsePlatformIds(value) {
|
|
124
156
|
const known = [];
|
|
125
157
|
const unknown = [];
|
package/dist/platforms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../src/platforms.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../src/platforms.ts"],"names":[],"mappings":"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"}
|