plugins 1.2.10-canary.1 → 1.2.10-canary.2
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/index.js +4 -104
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -725,75 +725,15 @@ async function stageInstallWorkspace(plugins, repoPath, targetId, stagingBaseDir
|
|
|
725
725
|
};
|
|
726
726
|
}
|
|
727
727
|
async function installToClaudeCode(plugins, scope, repoPath, source) {
|
|
728
|
-
|
|
729
|
-
step("Preparing plugins for Claude Code...");
|
|
730
|
-
barEmpty();
|
|
731
|
-
await prepareForClaudeCode(plugins, repoPath, marketplaceName);
|
|
732
|
-
const marketplaceSource = isAnthropicSource(source) ? normalizeGitUrl(source) : repoPath;
|
|
733
|
-
const claudePath = findClaude();
|
|
734
|
-
step("Adding marketplace");
|
|
735
|
-
barDebug(c.dim(`Binary: ${claudePath}`));
|
|
736
|
-
try {
|
|
737
|
-
const version = execSync2(`${claudePath} --version`, { encoding: "utf-8", stdio: "pipe" }).trim();
|
|
738
|
-
barDebug(c.dim(`Version: ${version}`));
|
|
739
|
-
} catch {
|
|
740
|
-
barDebug(c.dim(`Warning: could not get claude version`));
|
|
741
|
-
}
|
|
742
|
-
try {
|
|
743
|
-
const result = execSync2(`${claudePath} plugin marketplace add ${marketplaceSource}`, {
|
|
744
|
-
encoding: "utf-8",
|
|
745
|
-
stdio: "pipe"
|
|
746
|
-
});
|
|
747
|
-
if (result.trim()) barDebug(c.dim(result.trim()));
|
|
748
|
-
stepDone("Marketplace added");
|
|
749
|
-
} catch (err) {
|
|
750
|
-
const stderr = err.stderr?.toString().trim() ?? "";
|
|
751
|
-
const stdout = err.stdout?.toString().trim() ?? "";
|
|
752
|
-
if (stderr.includes("already") || stdout.includes("already")) {
|
|
753
|
-
stepDone(`Marketplace ${c.dim("'" + marketplaceName + "'")} already on disk`);
|
|
754
|
-
} else {
|
|
755
|
-
stepError("Failed to add marketplace.");
|
|
756
|
-
barLine(c.dim(`Command: ${claudePath} plugin marketplace add ${marketplaceSource}`));
|
|
757
|
-
if (stdout) barLine(c.dim(`stdout: ${stdout}`));
|
|
758
|
-
if (stderr) barLine(c.dim(`stderr: ${stderr}`));
|
|
759
|
-
barLine(c.dim(`exit code: ${err.status}`));
|
|
760
|
-
process.exit(1);
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
barEmpty();
|
|
764
|
-
for (const plugin of plugins) {
|
|
765
|
-
const pluginRef = `${plugin.name}@${marketplaceName}`;
|
|
766
|
-
step(`Installing ${c.bold(pluginRef)}...`);
|
|
767
|
-
try {
|
|
768
|
-
execSync2(`${claudePath} plugin install ${pluginRef} --scope ${scope}`, {
|
|
769
|
-
encoding: "utf-8",
|
|
770
|
-
stdio: "pipe"
|
|
771
|
-
});
|
|
772
|
-
stepDone(`Installed ${c.cyan(pluginRef)}`);
|
|
773
|
-
} catch (err) {
|
|
774
|
-
const stderr = err.stderr?.toString().trim() ?? "";
|
|
775
|
-
const stdout = err.stdout?.toString().trim() ?? "";
|
|
776
|
-
if (stderr.includes("already") || stdout.includes("already")) {
|
|
777
|
-
stepDone(`${c.cyan(pluginRef)} ${c.dim("already installed")}`);
|
|
778
|
-
} else {
|
|
779
|
-
stepError(`Failed to install ${pluginRef}`);
|
|
780
|
-
barLine(c.dim(`Command: ${claudePath} plugin install ${pluginRef} --scope ${scope}`));
|
|
781
|
-
if (stdout) barLine(c.dim(`stdout: ${stdout}`));
|
|
782
|
-
if (stderr) barLine(c.dim(`stderr: ${stderr}`));
|
|
783
|
-
barLine(c.dim(`exit code: ${err.status}`));
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
cachePopulated = true;
|
|
728
|
+
await installToPluginCache(plugins, scope, repoPath, source);
|
|
788
729
|
}
|
|
789
730
|
async function installToCursor(plugins, scope, repoPath, source) {
|
|
790
731
|
if (cachePopulated) return;
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
await installToClaudeCode(plugins, scope, repoPath, source);
|
|
732
|
+
if (process.platform === "win32") {
|
|
733
|
+
await installToCursorExtensions(plugins, scope, repoPath, source);
|
|
794
734
|
return;
|
|
795
735
|
}
|
|
796
|
-
await
|
|
736
|
+
await installToPluginCache(plugins, scope, repoPath, source);
|
|
797
737
|
}
|
|
798
738
|
async function installToPluginCache(plugins, scope, repoPath, source) {
|
|
799
739
|
const marketplaceName = plugins[0]?.marketplace ?? deriveMarketplaceName(source);
|
|
@@ -865,10 +805,6 @@ async function installToPluginCache(plugins, scope, repoPath, source) {
|
|
|
865
805
|
cachePopulated = true;
|
|
866
806
|
}
|
|
867
807
|
async function installToCursorExtensions(plugins, scope, repoPath, source) {
|
|
868
|
-
if (process.platform !== "win32") {
|
|
869
|
-
await installToPluginCache(plugins, scope, repoPath, source);
|
|
870
|
-
return;
|
|
871
|
-
}
|
|
872
808
|
const marketplaceName = plugins[0]?.marketplace ?? deriveMarketplaceName(source);
|
|
873
809
|
const home = homedir2();
|
|
874
810
|
const extensionsDir = join3(home, ".cursor", "extensions");
|
|
@@ -1096,26 +1032,6 @@ async function prepareForClaudeCode(plugins, repoPath, marketplaceName) {
|
|
|
1096
1032
|
await preparePluginDirForVendor(plugin, ".claude-plugin", "CLAUDE_PLUGIN_ROOT");
|
|
1097
1033
|
}
|
|
1098
1034
|
}
|
|
1099
|
-
function findClaudeOrNull() {
|
|
1100
|
-
try {
|
|
1101
|
-
const path = execSync2("which claude", { encoding: "utf-8", stdio: "pipe" }).trim();
|
|
1102
|
-
if (path) return path;
|
|
1103
|
-
} catch {
|
|
1104
|
-
}
|
|
1105
|
-
const home = homedir2();
|
|
1106
|
-
const candidates = [
|
|
1107
|
-
join3(home, ".local", "bin", "claude"),
|
|
1108
|
-
join3(home, ".bun", "bin", "claude"),
|
|
1109
|
-
"/usr/local/bin/claude"
|
|
1110
|
-
];
|
|
1111
|
-
for (const candidate of candidates) {
|
|
1112
|
-
if (existsSync2(candidate)) return candidate;
|
|
1113
|
-
}
|
|
1114
|
-
return null;
|
|
1115
|
-
}
|
|
1116
|
-
function findClaude() {
|
|
1117
|
-
return findClaudeOrNull() ?? "claude";
|
|
1118
|
-
}
|
|
1119
1035
|
async function preparePluginDirForVendor(plugin, vendorDir, envVar) {
|
|
1120
1036
|
const pluginPath = plugin.path;
|
|
1121
1037
|
const openPluginDir = join3(pluginPath, ".plugin");
|
|
@@ -1198,22 +1114,6 @@ function deriveMarketplaceName(source) {
|
|
|
1198
1114
|
const parts = source.replace(/\/$/, "").split("/");
|
|
1199
1115
|
return parts[parts.length - 1] ?? "plugins";
|
|
1200
1116
|
}
|
|
1201
|
-
function isAnthropicSource(source) {
|
|
1202
|
-
if (source.match(/^anthropics\/[\w.-]+$/)) return true;
|
|
1203
|
-
if (source.startsWith("https://github.com/anthropics/")) return true;
|
|
1204
|
-
if (source.startsWith("git@github.com:anthropics/")) return true;
|
|
1205
|
-
return false;
|
|
1206
|
-
}
|
|
1207
|
-
function normalizeGitUrl(source) {
|
|
1208
|
-
if (source.match(/^[\w-]+\/[\w.-]+$/)) {
|
|
1209
|
-
return `https://github.com/${source}`;
|
|
1210
|
-
}
|
|
1211
|
-
const sshMatch = source.match(/^git@([^:]+):(.+?)(?:\.git)?$/);
|
|
1212
|
-
if (sshMatch) {
|
|
1213
|
-
return `https://${sshMatch[1]}/${sshMatch[2]}`;
|
|
1214
|
-
}
|
|
1215
|
-
return source;
|
|
1216
|
-
}
|
|
1217
1117
|
|
|
1218
1118
|
// lib/telemetry.ts
|
|
1219
1119
|
var TELEMETRY_URL = "https://plugins-telemetry.labs.vercel.dev/t";
|