syntaur 0.4.2 → 0.4.3

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 CHANGED
@@ -10055,6 +10055,54 @@ async function getPreferredClaudeMarketplace() {
10055
10055
  targetDir: resolve24(candidate.rootDir, "plugins", "syntaur")
10056
10056
  };
10057
10057
  }
10058
+ async function registerKnownClaudeMarketplace(name, rootDir) {
10059
+ const manifestPath = getClaudeKnownMarketplacesPath();
10060
+ const existing = await readJsonFileIfExists(
10061
+ manifestPath
10062
+ ) ?? {};
10063
+ if (existing[name]?.installLocation === rootDir) {
10064
+ return;
10065
+ }
10066
+ existing[name] = {
10067
+ ...existing[name] ?? {},
10068
+ source: { source: "directory", path: rootDir },
10069
+ installLocation: rootDir
10070
+ };
10071
+ existing[name].lastUpdated = (/* @__PURE__ */ new Date()).toISOString();
10072
+ existing[name].autoUpdate = true;
10073
+ await ensureDir(dirname6(manifestPath));
10074
+ await writeFile6(manifestPath, `${JSON.stringify(existing, null, 2)}
10075
+ `, "utf-8");
10076
+ }
10077
+ async function ensureClaudeUserMarketplace() {
10078
+ const existing = await getPreferredClaudeMarketplace();
10079
+ if (existing) {
10080
+ return existing;
10081
+ }
10082
+ const rootDir = resolve24(getClaudeMarketplacesRoot(), "user-plugins");
10083
+ const manifestPath = resolve24(rootDir, ".claude-plugin", "marketplace.json");
10084
+ await ensureDir(resolve24(rootDir, "plugins"));
10085
+ if (!await fileExists(manifestPath)) {
10086
+ const scaffold = {
10087
+ plugins: []
10088
+ };
10089
+ scaffold.$schema = "https://anthropic.com/claude-code/marketplace.schema.json";
10090
+ scaffold.name = "user-plugins";
10091
+ scaffold.description = "Local user plugins";
10092
+ scaffold.owner = {
10093
+ name: process.env.USER ?? "user",
10094
+ email: ""
10095
+ };
10096
+ await writeClaudeMarketplaceFile(manifestPath, scaffold);
10097
+ }
10098
+ await registerKnownClaudeMarketplace("user-plugins", rootDir);
10099
+ return {
10100
+ name: "user-plugins",
10101
+ rootDir,
10102
+ manifestPath,
10103
+ targetDir: resolve24(rootDir, "plugins", "syntaur")
10104
+ };
10105
+ }
10058
10106
  async function detectClaudeMarketplaceForTarget(targetDir) {
10059
10107
  const normalizedTargetDir = normalizeAbsoluteInstallPath(targetDir, "Claude plugin target");
10060
10108
  const pluginsDir = dirname6(normalizedTargetDir);
@@ -10404,12 +10452,12 @@ async function recommendPluginTargetDir(pluginKind) {
10404
10452
  if (pluginKind !== "claude") {
10405
10453
  return configuredOrManaged ?? getDefaultPluginTargetDir(pluginKind);
10406
10454
  }
10407
- const preferredMarketplace = await getPreferredClaudeMarketplace();
10408
10455
  const legacyTarget = getDefaultPluginTargetDir("claude");
10409
- if (configuredOrManaged) {
10410
- return configuredOrManaged === legacyTarget && preferredMarketplace ? preferredMarketplace.targetDir : configuredOrManaged;
10456
+ if (configuredOrManaged && configuredOrManaged !== legacyTarget) {
10457
+ return configuredOrManaged;
10411
10458
  }
10412
- return preferredMarketplace?.targetDir ?? legacyTarget;
10459
+ const marketplace = await ensureClaudeUserMarketplace();
10460
+ return marketplace.targetDir;
10413
10461
  }
10414
10462
  async function recommendMarketplacePath() {
10415
10463
  const configuredOrManaged = await getConfiguredOrLegacyMarketplacePath();
@@ -10704,6 +10752,10 @@ async function installPluginCommand(options) {
10704
10752
  pluginTargetDir: result.targetDir,
10705
10753
  expectedExistingPluginTargetDir: previousMarketplace && previousMarketplace.manifestPath === currentMarketplace.manifestPath ? previousTargetDir : null
10706
10754
  });
10755
+ } else {
10756
+ console.warn(
10757
+ `Warning: ${result.targetDir} is not inside a Claude Code marketplace (expected parent path of the form ~/.claude/plugins/marketplaces/<name>/plugins/syntaur). The plugin files were copied, but Claude Code will not discover them until you place them inside a marketplace.`
10758
+ );
10707
10759
  }
10708
10760
  await updateIntegrationConfig({ claudePluginDir: result.targetDir });
10709
10761
  if (previousMarketplace && previousTargetDir && (!currentMarketplace || currentMarketplace.manifestPath !== previousMarketplace.manifestPath)) {