prpm 1.1.8 → 1.1.9

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
@@ -11298,6 +11298,45 @@ var init_to_droid = __esm({
11298
11298
  }
11299
11299
  });
11300
11300
 
11301
+ // ../converters/dist/schema-files.js
11302
+ var import_module, import_path9, schemaRequire, convertersPackagePath, convertersDir, loadSchema2, agentsMdSchema, canonicalSchema, claudeSchema, continueSchema, copilotSchema, cursorSchema, droidSchema, geminiMdSchema, geminiSchema, kiroSteeringSchema, opencodeSchema, rulerSchema, windsurfSchema, claudeAgentSchema, claudeHookSchema, claudeSkillSchema, claudeSlashCommandSchema, cursorCommandSchema, droidHookSchema, droidSkillSchema, droidSlashCommandSchema, kiroAgentSchema, kiroHookSchema, opencodeSlashCommandSchema;
11303
+ var init_schema_files = __esm({
11304
+ "../converters/dist/schema-files.js"() {
11305
+ "use strict";
11306
+ init_cjs_shims();
11307
+ import_module = require("module");
11308
+ import_path9 = require("path");
11309
+ schemaRequire = typeof require !== "undefined" ? require : (0, import_module.createRequire)(process.cwd() + "/");
11310
+ convertersPackagePath = schemaRequire.resolve("@pr-pm/converters/package.json");
11311
+ convertersDir = (0, import_path9.dirname)(convertersPackagePath);
11312
+ loadSchema2 = (filename) => schemaRequire((0, import_path9.join)(convertersDir, "schemas", filename));
11313
+ agentsMdSchema = loadSchema2("agents-md.schema.json");
11314
+ canonicalSchema = loadSchema2("canonical.schema.json");
11315
+ claudeSchema = loadSchema2("claude.schema.json");
11316
+ continueSchema = loadSchema2("continue.schema.json");
11317
+ copilotSchema = loadSchema2("copilot.schema.json");
11318
+ cursorSchema = loadSchema2("cursor.schema.json");
11319
+ droidSchema = loadSchema2("droid.schema.json");
11320
+ geminiMdSchema = loadSchema2("gemini-md.schema.json");
11321
+ geminiSchema = loadSchema2("gemini.schema.json");
11322
+ kiroSteeringSchema = loadSchema2("kiro-steering.schema.json");
11323
+ opencodeSchema = loadSchema2("opencode.schema.json");
11324
+ rulerSchema = loadSchema2("ruler.schema.json");
11325
+ windsurfSchema = loadSchema2("windsurf.schema.json");
11326
+ claudeAgentSchema = loadSchema2("claude-agent.schema.json");
11327
+ claudeHookSchema = loadSchema2("claude-hook.schema.json");
11328
+ claudeSkillSchema = loadSchema2("claude-skill.schema.json");
11329
+ claudeSlashCommandSchema = loadSchema2("claude-slash-command.schema.json");
11330
+ cursorCommandSchema = loadSchema2("cursor-command.schema.json");
11331
+ droidHookSchema = loadSchema2("droid-hook.schema.json");
11332
+ droidSkillSchema = loadSchema2("droid-skill.schema.json");
11333
+ droidSlashCommandSchema = loadSchema2("droid-slash-command.schema.json");
11334
+ kiroAgentSchema = loadSchema2("kiro-agent.schema.json");
11335
+ kiroHookSchema = loadSchema2("kiro-hook.schema.json");
11336
+ opencodeSlashCommandSchema = loadSchema2("opencode-slash-command.schema.json");
11337
+ }
11338
+ });
11339
+
11301
11340
  // ../converters/dist/index.js
11302
11341
  var init_dist = __esm({
11303
11342
  "../converters/dist/index.js"() {
@@ -11330,6 +11369,7 @@ var init_dist = __esm({
11330
11369
  init_to_droid();
11331
11370
  init_taxonomy_utils();
11332
11371
  init_validation();
11372
+ init_schema_files();
11333
11373
  }
11334
11374
  });
11335
11375
 
@@ -11684,7 +11724,7 @@ async function handleInstall(packageSpec, options) {
11684
11724
  destDir = getDestinationDir2(effectiveFormat, effectiveSubtype, pkg.name);
11685
11725
  if (locationOverride && effectiveFormat === "cursor") {
11686
11726
  const relativeDestDir = destDir.startsWith("./") ? destDir.slice(2) : destDir;
11687
- destDir = import_path9.default.join(locationOverride, relativeDestDir);
11727
+ destDir = import_path10.default.join(locationOverride, relativeDestDir);
11688
11728
  console.log(` \u{1F4C1} Installing Cursor package to custom location: ${destDir}`);
11689
11729
  }
11690
11730
  let mainFile = extractedFiles[0].content;
@@ -11705,7 +11745,7 @@ async function handleInstall(packageSpec, options) {
11705
11745
  const manifestFilename = getManifestFilename(effectiveFormat);
11706
11746
  let targetPath = manifestFilename;
11707
11747
  if (locationOverride) {
11708
- targetPath = import_path9.default.join(locationOverride, `${manifestFilename.replace(".md", ".override.md")}`);
11748
+ targetPath = import_path10.default.join(locationOverride, `${manifestFilename.replace(".md", ".override.md")}`);
11709
11749
  console.log(` \u{1F4C1} Installing to custom location: ${targetPath}`);
11710
11750
  }
11711
11751
  destPath = targetPath;
@@ -11806,7 +11846,7 @@ async function handleInstall(packageSpec, options) {
11806
11846
  destDir = getDestinationDir2(effectiveFormat, effectiveSubtype, pkg.name);
11807
11847
  if (locationOverride && effectiveFormat === "cursor") {
11808
11848
  const relativeDestDir = destDir.startsWith("./") ? destDir.slice(2) : destDir;
11809
- destDir = import_path9.default.join(locationOverride, relativeDestDir);
11849
+ destDir = import_path10.default.join(locationOverride, relativeDestDir);
11810
11850
  console.log(` \u{1F4C1} Installing Cursor package to custom location: ${destDir}`);
11811
11851
  }
11812
11852
  const packageName = stripAuthorNamespace2(packageId);
@@ -11995,7 +12035,7 @@ async function extractTarball(tarball, packageId) {
11995
12035
  } catch (error) {
11996
12036
  throw new CLIError(`Package decompression failed: ${error.message}`);
11997
12037
  }
11998
- const tmpDir = await import_promises2.default.mkdtemp(import_path9.default.join(import_os3.default.tmpdir(), "prpm-"));
12038
+ const tmpDir = await import_promises2.default.mkdtemp(import_path10.default.join(import_os3.default.tmpdir(), "prpm-"));
11999
12039
  const cleanup = async () => {
12000
12040
  try {
12001
12041
  await import_promises2.default.rm(tmpDir, { recursive: true, force: true });
@@ -12043,7 +12083,7 @@ async function collectExtractedFiles(rootDir, excludedNames, fs12) {
12043
12083
  if (!currentDir) continue;
12044
12084
  const entries = await fs12.readdir(currentDir, { withFileTypes: true });
12045
12085
  for (const entry of entries) {
12046
- const fullPath = import_path9.default.join(currentDir, entry.name);
12086
+ const fullPath = import_path10.default.join(currentDir, entry.name);
12047
12087
  if (entry.isDirectory()) {
12048
12088
  dirs.push(fullPath);
12049
12089
  continue;
@@ -12055,7 +12095,7 @@ async function collectExtractedFiles(rootDir, excludedNames, fs12) {
12055
12095
  continue;
12056
12096
  }
12057
12097
  const content = await fs12.readFile(fullPath, "utf-8");
12058
- const relativePath = import_path9.default.relative(rootDir, fullPath).split(import_path9.default.sep).join("/");
12098
+ const relativePath = import_path10.default.relative(rootDir, fullPath).split(import_path10.default.sep).join("/");
12059
12099
  files.push({
12060
12100
  name: relativePath,
12061
12101
  content
@@ -12087,11 +12127,11 @@ async function installFromLockfile(options) {
12087
12127
  console.log(` Installing ${packageId}...`);
12088
12128
  let locationOverride = options.location;
12089
12129
  if (!locationOverride && lockEntry.format === "agents.md" && lockEntry.installedPath) {
12090
- const baseName = import_path9.default.basename(lockEntry.installedPath);
12130
+ const baseName = import_path10.default.basename(lockEntry.installedPath);
12091
12131
  if (baseName === "AGENTS.override.md") {
12092
- locationOverride = import_path9.default.dirname(lockEntry.installedPath);
12132
+ locationOverride = import_path10.default.dirname(lockEntry.installedPath);
12093
12133
  } else if (baseName !== "AGENTS.md") {
12094
- locationOverride = import_path9.default.dirname(lockEntry.installedPath);
12134
+ locationOverride = import_path10.default.dirname(lockEntry.installedPath);
12095
12135
  }
12096
12136
  }
12097
12137
  const manifestFile = (_a = lockEntry.progressiveDisclosure) == null ? void 0 : _a.manifestPath;
@@ -12160,7 +12200,7 @@ function createInstallCommand() {
12160
12200
  });
12161
12201
  return command;
12162
12202
  }
12163
- var import_commander11, import_chalk, import_registry_client5, import_stream, import_promises, tar, import_path9, import_zlib, import_promises2, import_os3;
12203
+ var import_commander11, import_chalk, import_registry_client5, import_stream, import_promises, tar, import_path10, import_zlib, import_promises2, import_os3;
12164
12204
  var init_install = __esm({
12165
12205
  "src/commands/install.ts"() {
12166
12206
  "use strict";
@@ -12176,7 +12216,7 @@ var init_install = __esm({
12176
12216
  tar = __toESM(require("tar"));
12177
12217
  init_errors();
12178
12218
  init_prompts();
12179
- import_path9 = __toESM(require("path"));
12219
+ import_path10 = __toESM(require("path"));
12180
12220
  import_zlib = __toESM(require("zlib"));
12181
12221
  import_promises2 = __toESM(require("fs/promises"));
12182
12222
  import_os3 = __toESM(require("os"));
@@ -12193,7 +12233,7 @@ var init_install = __esm({
12193
12233
  init_cjs_shims();
12194
12234
  var import_commander29 = require("commander");
12195
12235
  var import_fs15 = require("fs");
12196
- var import_path18 = require("path");
12236
+ var import_path19 = require("path");
12197
12237
 
12198
12238
  // src/commands/list.ts
12199
12239
  init_cjs_shims();
@@ -13358,7 +13398,7 @@ init_install();
13358
13398
  init_cjs_shims();
13359
13399
  var import_commander12 = require("commander");
13360
13400
  var import_promises6 = require("fs/promises");
13361
- var import_path13 = require("path");
13401
+ var import_path14 = require("path");
13362
13402
  var tar2 = __toESM(require("tar"));
13363
13403
  var import_os4 = require("os");
13364
13404
  var import_crypto2 = require("crypto");
@@ -13532,13 +13572,13 @@ init_cjs_shims();
13532
13572
  var import_ajv2 = __toESM(require("ajv"));
13533
13573
  var import_ajv_formats2 = __toESM(require("ajv-formats"));
13534
13574
  var import_fs10 = require("fs");
13535
- var import_path10 = require("path");
13575
+ var import_path11 = require("path");
13536
13576
  var schema2;
13537
13577
  var schemaCandidates = [
13538
13578
  // Source file layout (src/core → ../../schemas)
13539
- (0, import_path10.join)(__dirname, "../../schemas/prpm-manifest.schema.json"),
13579
+ (0, import_path11.join)(__dirname, "../../schemas/prpm-manifest.schema.json"),
13540
13580
  // Bundled layout (dist/index.js → ../schemas)
13541
- (0, import_path10.join)(__dirname, "../schemas/prpm-manifest.schema.json")
13581
+ (0, import_path11.join)(__dirname, "../schemas/prpm-manifest.schema.json")
13542
13582
  ];
13543
13583
  for (const candidate of schemaCandidates) {
13544
13584
  try {
@@ -13598,7 +13638,7 @@ function getManifestSchema() {
13598
13638
  // src/utils/license-extractor.ts
13599
13639
  init_cjs_shims();
13600
13640
  var import_promises3 = require("fs/promises");
13601
- var import_path11 = require("path");
13641
+ var import_path12 = require("path");
13602
13642
  var import_fs11 = require("fs");
13603
13643
  var LICENSE_FILE_PATTERNS = [
13604
13644
  "LICENSE",
@@ -13648,7 +13688,7 @@ function generateLicenseUrl(repositoryUrl, fileName) {
13648
13688
  async function extractLicenseInfo(repositoryUrl) {
13649
13689
  const cwd = process.cwd();
13650
13690
  for (const fileName of LICENSE_FILE_PATTERNS) {
13651
- const filePath = (0, import_path11.join)(cwd, fileName);
13691
+ const filePath = (0, import_path12.join)(cwd, fileName);
13652
13692
  try {
13653
13693
  await (0, import_promises3.access)(filePath, import_fs11.constants.R_OK);
13654
13694
  const text = await (0, import_promises3.readFile)(filePath, "utf-8");
@@ -13684,7 +13724,7 @@ function validateLicenseInfo(licenseInfo, packageName) {
13684
13724
  // src/utils/snippet-extractor.ts
13685
13725
  init_cjs_shims();
13686
13726
  var import_promises4 = require("fs/promises");
13687
- var import_path12 = require("path");
13727
+ var import_path13 = require("path");
13688
13728
  var MAX_SNIPPET_LENGTH = 2e3;
13689
13729
  async function extractSnippet(manifest) {
13690
13730
  const cwd = process.cwd();
@@ -13700,7 +13740,7 @@ async function extractSnippet(manifest) {
13700
13740
  const firstFile = manifest.files[0];
13701
13741
  fileName = typeof firstFile === "string" ? firstFile : firstFile.path;
13702
13742
  }
13703
- const fullPath = (0, import_path12.join)(cwd, fileName);
13743
+ const fullPath = (0, import_path13.join)(cwd, fileName);
13704
13744
  const stats = await (0, import_promises4.stat)(fullPath);
13705
13745
  if (stats.isDirectory()) {
13706
13746
  console.warn(`\u26A0\uFE0F Skipping snippet extraction: "${fullPath}" is a directory`);
@@ -13960,7 +14000,7 @@ async function validatePackageFiles(manifest) {
13960
14000
 
13961
14001
  // src/commands/publish.ts
13962
14002
  async function findAndLoadManifests() {
13963
- const prpmJsonPath = (0, import_path13.join)(process.cwd(), "prpm.json");
14003
+ const prpmJsonPath = (0, import_path14.join)(process.cwd(), "prpm.json");
13964
14004
  let prpmJsonExists = false;
13965
14005
  let prpmJsonError = null;
13966
14006
  try {
@@ -14012,7 +14052,7 @@ async function findAndLoadManifests() {
14012
14052
  throw error;
14013
14053
  }
14014
14054
  }
14015
- const marketplaceJsonPath = (0, import_path13.join)(process.cwd(), ".claude", "marketplace.json");
14055
+ const marketplaceJsonPath = (0, import_path14.join)(process.cwd(), ".claude", "marketplace.json");
14016
14056
  try {
14017
14057
  const content = await (0, import_promises6.readFile)(marketplaceJsonPath, "utf-8");
14018
14058
  const marketplaceData = JSON.parse(content);
@@ -14028,7 +14068,7 @@ async function findAndLoadManifests() {
14028
14068
  return { manifests, collections: [], source: ".claude/marketplace.json" };
14029
14069
  } catch (error) {
14030
14070
  }
14031
- const marketplaceJsonPluginPath = (0, import_path13.join)(process.cwd(), ".claude-plugin", "marketplace.json");
14071
+ const marketplaceJsonPluginPath = (0, import_path14.join)(process.cwd(), ".claude-plugin", "marketplace.json");
14032
14072
  try {
14033
14073
  const content = await (0, import_promises6.readFile)(marketplaceJsonPluginPath, "utf-8");
14034
14074
  const marketplaceData = JSON.parse(content);
@@ -14145,8 +14185,8 @@ function predictScopedPackageName(manifestName, username, organization) {
14145
14185
  return manifestName;
14146
14186
  }
14147
14187
  async function createTarball(manifest) {
14148
- const tmpDir = (0, import_path13.join)((0, import_os4.tmpdir)(), `prpm-${(0, import_crypto2.randomBytes)(8).toString("hex")}`);
14149
- const tarballPath = (0, import_path13.join)(tmpDir, "package.tar.gz");
14188
+ const tmpDir = (0, import_path14.join)((0, import_os4.tmpdir)(), `prpm-${(0, import_crypto2.randomBytes)(8).toString("hex")}`);
14189
+ const tarballPath = (0, import_path14.join)(tmpDir, "package.tar.gz");
14150
14190
  try {
14151
14191
  await (0, import_promises6.mkdir)(tmpDir, { recursive: true });
14152
14192
  const filePaths = normalizeFilePaths2(manifest.files);
@@ -14207,7 +14247,7 @@ async function handlePublish(options) {
14207
14247
  const { manifests, collections, source } = await findAndLoadManifests();
14208
14248
  if (source === "prpm.json (multi-package)" || source === "prpm.json") {
14209
14249
  try {
14210
- const prpmJsonPath = (0, import_path13.join)(process.cwd(), "prpm.json");
14250
+ const prpmJsonPath = (0, import_path14.join)(process.cwd(), "prpm.json");
14211
14251
  const prpmContent = await (0, import_promises6.readFile)(prpmJsonPath, "utf-8");
14212
14252
  const prpmManifest = JSON.parse(prpmContent);
14213
14253
  if (prpmManifest.scripts) {
@@ -14283,7 +14323,7 @@ async function handlePublish(options) {
14283
14323
  const RETRY_DELAY_MS = options.dryRun || process.env.NODE_ENV === "test" ? 0 : parseInt(process.env.PRPM_RETRY_DELAY_MS || "5000");
14284
14324
  const delay = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms));
14285
14325
  const isRetriableError = (error2) => {
14286
- return error2.includes("Service Unavailable") || error2.includes("at capacity") || error2.includes("503") || error2.includes("ECONNRESET") || error2.includes("ETIMEDOUT");
14326
+ return error2.includes("Service Unavailable") || error2.includes("Bad Gateway") || error2.includes("at capacity") || error2.includes("502") || error2.includes("503") || error2.includes("ECONNRESET") || error2.includes("ETIMEDOUT");
14287
14327
  };
14288
14328
  if (filteredManifests.length > 1 && BATCH_DELAY_MS > 0) {
14289
14329
  console.log(`\u{1F4E6} Publishing ${filteredManifests.length} packages in batches of ${BATCH_SIZE}`);
@@ -15264,7 +15304,7 @@ function createSchemaCommand() {
15264
15304
  init_cjs_shims();
15265
15305
  var import_commander19 = require("commander");
15266
15306
  var import_promises7 = require("fs/promises");
15267
- var import_path14 = require("path");
15307
+ var import_path15 = require("path");
15268
15308
  var import_fs12 = require("fs");
15269
15309
  var readline3 = __toESM(require("readline/promises"));
15270
15310
  var import_process = require("process");
@@ -15632,8 +15672,8 @@ function getDefaultAuthor() {
15632
15672
  async function createExampleFiles(format, files, packageName) {
15633
15673
  const templates = EXAMPLE_TEMPLATES[format] || {};
15634
15674
  for (const file of files) {
15635
- const filePath = (0, import_path14.join)(process.cwd(), file);
15636
- const dirPath = (0, import_path14.join)(filePath, "..");
15675
+ const filePath = (0, import_path15.join)(process.cwd(), file);
15676
+ const dirPath = (0, import_path15.join)(filePath, "..");
15637
15677
  if (!(0, import_fs12.existsSync)(dirPath)) {
15638
15678
  await (0, import_promises7.mkdir)(dirPath, { recursive: true });
15639
15679
  }
@@ -15651,7 +15691,7 @@ Add your content here.
15651
15691
  }
15652
15692
  }
15653
15693
  async function createReadme(config) {
15654
- const readmePath = (0, import_path14.join)(process.cwd(), "README.md");
15694
+ const readmePath = (0, import_path15.join)(process.cwd(), "README.md");
15655
15695
  if ((0, import_fs12.existsSync)(readmePath)) {
15656
15696
  console.log(" Skipping README.md (already exists)");
15657
15697
  return;
@@ -15686,7 +15726,7 @@ ${config.license}
15686
15726
  console.log(" Created README.md");
15687
15727
  }
15688
15728
  async function initPackage(options) {
15689
- const manifestPath = (0, import_path14.join)(process.cwd(), "prpm.json");
15729
+ const manifestPath = (0, import_path15.join)(process.cwd(), "prpm.json");
15690
15730
  if ((0, import_fs12.existsSync)(manifestPath) && !options.force) {
15691
15731
  throw new Error(
15692
15732
  "prpm.json already exists. Use --force to overwrite, or run this command in a different directory."
@@ -15986,15 +16026,15 @@ function createConfigCommand() {
15986
16026
  init_cjs_shims();
15987
16027
  var import_commander21 = require("commander");
15988
16028
  var import_promises8 = require("fs/promises");
15989
- var import_path15 = require("path");
16029
+ var import_path16 = require("path");
15990
16030
  init_telemetry();
15991
16031
  init_lockfile();
15992
16032
  init_errors();
15993
16033
  function detectPackageInfo(filePath, content) {
15994
- const fileName = (0, import_path15.basename)(filePath);
16034
+ const fileName = (0, import_path16.basename)(filePath);
15995
16035
  const lowerFileName = fileName.toLowerCase();
15996
16036
  if (fileName === "SKILL.md") {
15997
- const dirName = (0, import_path15.basename)((0, import_path15.join)(filePath, ".."));
16037
+ const dirName = (0, import_path16.basename)((0, import_path16.join)(filePath, ".."));
15998
16038
  return {
15999
16039
  format: "claude",
16000
16040
  subtype: "skill",
@@ -16046,8 +16086,8 @@ async function scanDirectory2(dirPath, baseDir, scanDir, maxDepth = 5, currentDe
16046
16086
  try {
16047
16087
  const entries = await (0, import_promises8.readdir)(dirPath, { withFileTypes: true });
16048
16088
  for (const entry of entries) {
16049
- const fullPath = (0, import_path15.join)(dirPath, entry.name);
16050
- const relativePath = (0, import_path15.relative)(baseDir, fullPath);
16089
+ const fullPath = (0, import_path16.join)(dirPath, entry.name);
16090
+ const relativePath = (0, import_path16.relative)(baseDir, fullPath);
16051
16091
  if (entry.name === "node_modules" || entry.name === ".git" || entry.name === "dist" || entry.name === "build") {
16052
16092
  continue;
16053
16093
  }
@@ -16184,7 +16224,7 @@ async function handleCatalog(directories, options) {
16184
16224
  success = true;
16185
16225
  return;
16186
16226
  }
16187
- const prpmJsonPath = options.output || (0, import_path15.join)(process.cwd(), "prpm.json");
16227
+ const prpmJsonPath = options.output || (0, import_path16.join)(process.cwd(), "prpm.json");
16188
16228
  let manifest;
16189
16229
  if (options.append) {
16190
16230
  try {
@@ -16222,7 +16262,7 @@ async function handleCatalog(directories, options) {
16222
16262
  }
16223
16263
  let description = `${discovered.format} ${discovered.subtype}`;
16224
16264
  try {
16225
- const firstFilePath = (0, import_path15.join)(process.cwd(), discovered.scanDir, discovered.files[0]);
16265
+ const firstFilePath = (0, import_path16.join)(process.cwd(), discovered.scanDir, discovered.files[0]);
16226
16266
  const content = await (0, import_promises8.readFile)(firstFilePath, "utf-8");
16227
16267
  const extractedDesc = extractDescription2(content);
16228
16268
  if (extractedDesc) {
@@ -17473,57 +17513,57 @@ function createStarredCommand() {
17473
17513
  init_cjs_shims();
17474
17514
  var import_commander27 = require("commander");
17475
17515
  var import_promises9 = require("fs/promises");
17476
- var import_path16 = require("path");
17516
+ var import_path17 = require("path");
17477
17517
  var import_fs13 = require("fs");
17478
17518
  var import_readline = require("readline");
17479
17519
  var import_chalk2 = __toESM(require_source());
17480
17520
  init_errors();
17481
17521
  init_dist();
17482
17522
  function getDefaultPath(format, filename, subtype, customName) {
17483
- const baseName = customName || (0, import_path16.basename)(filename, (0, import_path16.extname)(filename));
17523
+ const baseName = customName || (0, import_path17.basename)(filename, (0, import_path17.extname)(filename));
17484
17524
  switch (format) {
17485
17525
  case "cursor":
17486
17526
  if (subtype === "slash-command") {
17487
- return (0, import_path16.join)(process.cwd(), ".cursor", "commands", `${baseName}.md`);
17527
+ return (0, import_path17.join)(process.cwd(), ".cursor", "commands", `${baseName}.md`);
17488
17528
  }
17489
- return (0, import_path16.join)(process.cwd(), ".cursor", "rules", `${baseName}.mdc`);
17529
+ return (0, import_path17.join)(process.cwd(), ".cursor", "rules", `${baseName}.mdc`);
17490
17530
  case "claude":
17491
17531
  if (subtype === "skill") {
17492
- return (0, import_path16.join)(process.cwd(), ".claude", "skills", baseName, "SKILL.md");
17532
+ return (0, import_path17.join)(process.cwd(), ".claude", "skills", baseName, "SKILL.md");
17493
17533
  } else if (subtype === "slash-command") {
17494
- return (0, import_path16.join)(process.cwd(), ".claude", "commands", `${baseName}.md`);
17534
+ return (0, import_path17.join)(process.cwd(), ".claude", "commands", `${baseName}.md`);
17495
17535
  } else {
17496
- return (0, import_path16.join)(process.cwd(), ".claude", "agents", `${baseName}.md`);
17536
+ return (0, import_path17.join)(process.cwd(), ".claude", "agents", `${baseName}.md`);
17497
17537
  }
17498
17538
  case "windsurf":
17499
- return (0, import_path16.join)(process.cwd(), ".windsurf", "rules", `${baseName}.md`);
17539
+ return (0, import_path17.join)(process.cwd(), ".windsurf", "rules", `${baseName}.md`);
17500
17540
  case "kiro":
17501
17541
  if (subtype === "hook") {
17502
- return (0, import_path16.join)(process.cwd(), ".kiro", "hooks", `${baseName}.kiro.hook`);
17542
+ return (0, import_path17.join)(process.cwd(), ".kiro", "hooks", `${baseName}.kiro.hook`);
17503
17543
  }
17504
17544
  if (subtype === "agent") {
17505
- return (0, import_path16.join)(process.cwd(), ".kiro", "agents", `${baseName}.json`);
17545
+ return (0, import_path17.join)(process.cwd(), ".kiro", "agents", `${baseName}.json`);
17506
17546
  }
17507
- return (0, import_path16.join)(process.cwd(), ".kiro", "steering", `${baseName}.md`);
17547
+ return (0, import_path17.join)(process.cwd(), ".kiro", "steering", `${baseName}.md`);
17508
17548
  case "copilot":
17509
- return (0, import_path16.join)(process.cwd(), ".github", "instructions", `${baseName}.instructions.md`);
17549
+ return (0, import_path17.join)(process.cwd(), ".github", "instructions", `${baseName}.instructions.md`);
17510
17550
  case "continue":
17511
17551
  if (subtype === "slash-command" || subtype === "prompt") {
17512
- return (0, import_path16.join)(process.cwd(), ".continue", "prompts", `${baseName}.md`);
17552
+ return (0, import_path17.join)(process.cwd(), ".continue", "prompts", `${baseName}.md`);
17513
17553
  }
17514
- return (0, import_path16.join)(process.cwd(), ".continue", "rules", `${baseName}.md`);
17554
+ return (0, import_path17.join)(process.cwd(), ".continue", "rules", `${baseName}.md`);
17515
17555
  case "agents.md":
17516
- return (0, import_path16.join)(process.cwd(), "agents.md");
17556
+ return (0, import_path17.join)(process.cwd(), "agents.md");
17517
17557
  case "gemini":
17518
- return (0, import_path16.join)(process.cwd(), ".gemini", "commands", `${baseName}.toml`);
17558
+ return (0, import_path17.join)(process.cwd(), ".gemini", "commands", `${baseName}.toml`);
17519
17559
  case "ruler":
17520
- return (0, import_path16.join)(process.cwd(), ".ruler", `${baseName}.md`);
17560
+ return (0, import_path17.join)(process.cwd(), ".ruler", `${baseName}.md`);
17521
17561
  default:
17522
17562
  throw new CLIError(`Unknown format: ${format}`);
17523
17563
  }
17524
17564
  }
17525
17565
  function detectFormat(content, filepath) {
17526
- const ext = (0, import_path16.extname)(filepath).toLowerCase();
17566
+ const ext = (0, import_path17.extname)(filepath).toLowerCase();
17527
17567
  if (ext === ".mdc" || filepath.includes(".cursor/rules") || filepath.includes(".cursor/commands")) {
17528
17568
  return "cursor";
17529
17569
  }
@@ -17545,7 +17585,7 @@ function detectFormat(content, filepath) {
17545
17585
  if (filepath.includes(".continue/rules") || filepath.includes(".continue/prompts") || filepath.includes(".continuerules")) {
17546
17586
  return "continue";
17547
17587
  }
17548
- if ((0, import_path16.basename)(filepath) === "agents.md") {
17588
+ if ((0, import_path17.basename)(filepath) === "agents.md") {
17549
17589
  return "agents.md";
17550
17590
  }
17551
17591
  if (ext === ".toml" || filepath.includes(".gemini/commands")) {
@@ -17710,7 +17750,7 @@ async function handleConvert(sourcePath, options) {
17710
17750
  return;
17711
17751
  }
17712
17752
  }
17713
- const outputDir = (0, import_path16.dirname)(outputPath);
17753
+ const outputDir = (0, import_path17.dirname)(outputPath);
17714
17754
  await (0, import_promises9.mkdir)(outputDir, { recursive: true });
17715
17755
  console.log(import_chalk2.default.dim("Writing converted file..."));
17716
17756
  await (0, import_promises9.writeFile)(outputPath, result.content, "utf-8");
@@ -17777,7 +17817,7 @@ Valid subtypes: ${validSubtypes.join(", ")}`
17777
17817
  init_cjs_shims();
17778
17818
  var import_commander28 = require("commander");
17779
17819
  var import_fs14 = require("fs");
17780
- var import_path17 = require("path");
17820
+ var import_path18 = require("path");
17781
17821
  var import_chalk3 = __toESM(require_source());
17782
17822
  init_errors();
17783
17823
  init_lockfile();
@@ -17793,7 +17833,7 @@ async function exportToRuler(options) {
17793
17833
  }
17794
17834
  console.log(import_chalk3.default.green(`\u2713 Found ${packages.length} installed package${packages.length === 1 ? "" : "s"}`));
17795
17835
  console.log();
17796
- const outputDir = options.output || (0, import_path17.join)(process.cwd(), ".ruler");
17836
+ const outputDir = options.output || (0, import_path18.join)(process.cwd(), ".ruler");
17797
17837
  let rulerExists = false;
17798
17838
  try {
17799
17839
  await import_fs14.promises.access(outputDir);
@@ -17820,7 +17860,7 @@ async function exportToRuler(options) {
17820
17860
  const content = await import_fs14.promises.readFile(pkg.installedPath, "utf-8");
17821
17861
  const rulerContent = createRulerFormat(pkg.id, pkg.version, content, pkg.format, pkg.subtype);
17822
17862
  const rulerFilename = `${packageName}.md`;
17823
- const rulerPath = (0, import_path17.join)(outputDir, rulerFilename);
17863
+ const rulerPath = (0, import_path18.join)(outputDir, rulerFilename);
17824
17864
  await import_fs14.promises.writeFile(rulerPath, rulerContent, "utf-8");
17825
17865
  console.log(import_chalk3.default.green(`\u2713 Exported ${pkg.id} \u2192 ${rulerFilename}`));
17826
17866
  exportedCount++;
@@ -17860,7 +17900,7 @@ function createRulerFormat(packageId, version, content, format, subtype) {
17860
17900
  return frontmatter + contentWithoutFrontmatter;
17861
17901
  }
17862
17902
  async function ensureRulerConfig(rulerDir) {
17863
- const configPath = (0, import_path17.join)((0, import_path17.dirname)(rulerDir), "ruler.toml");
17903
+ const configPath = (0, import_path18.join)((0, import_path18.dirname)(rulerDir), "ruler.toml");
17864
17904
  try {
17865
17905
  await import_fs14.promises.access(configPath);
17866
17906
  console.log(import_chalk3.default.dim("\u2139 ruler.toml already exists (not modified)"));
@@ -17958,7 +17998,7 @@ init_telemetry();
17958
17998
  init_errors();
17959
17999
  function getVersion() {
17960
18000
  try {
17961
- const packageJsonPath = (0, import_path18.join)(__dirname, "../package.json");
18001
+ const packageJsonPath = (0, import_path19.join)(__dirname, "../package.json");
17962
18002
  const packageJson = JSON.parse((0, import_fs15.readFileSync)(packageJsonPath, "utf-8"));
17963
18003
  return packageJson.version || "0.0.0";
17964
18004
  } catch {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/agents-md.json",
4
- "$comment": "Official documentation: https://docs.factory.ai/cli/configuration/agents-md",
4
+ "$comment": "https://docs.factory.ai/cli/configuration/agents-md",
5
5
  "title": "agents.md Format",
6
6
  "description": "JSON Schema for agents.md format - plain markdown project-specific AI instructions (NO frontmatter)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/claude/agent.json",
4
- "$comment": "Official documentation: https://code.claude.com/docs/en/sub-agents",
4
+ "$comment": "https://code.claude.com/docs/en/sub-agents",
5
5
  "title": "Claude Agent Format",
6
6
  "description": "JSON Schema for Claude Code Agents - long-running assistants with tool access",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/claude/hook.json",
4
- "$comment": "Official documentation: https://code.claude.com/docs/en/hooks",
4
+ "$comment": "https://code.claude.com/docs/en/hooks",
5
5
  "title": "Claude Hook Format",
6
6
  "description": "JSON Schema for Claude Code Hooks - executable code triggered by events. Valid hook events: PreToolUse (blocks the tool call, shows stderr to Claude), PermissionRequest (denies the permission, shows stderr to Claude), PostToolUse (shows stderr to Claude, tool already ran), Notification (shows stderr to user only), UserPromptSubmit (blocks prompt processing, erases prompt, shows stderr to user only), Stop (blocks stoppage, shows stderr to Claude), SubagentStop (blocks stoppage, shows stderr to Claude subagent), PreCompact (shows stderr to user only), SessionStart (shows stderr to user only), SessionEnd (shows stderr to user only)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/claude/skill.json",
4
- "$comment": "Official documentation: https://code.claude.com/docs/en/skills",
4
+ "$comment": "https://code.claude.com/docs/en/skills",
5
5
  "title": "Claude Skill Format",
6
6
  "description": "JSON Schema for Claude Code Skills - reusable patterns invoked during conversation",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/claude/slash-command.json",
4
- "$comment": "Official documentation: https://code.claude.com/docs/en/slash-commands",
4
+ "$comment": "https://code.claude.com/docs/en/slash-commands",
5
5
  "title": "Claude Slash Command Format",
6
6
  "description": "JSON Schema for Claude Code Slash Commands - quick actions triggered by /command-name",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/claude.json",
4
- "$comment": "Official documentation: https://code.claude.com/docs/en",
4
+ "$comment": "https://code.claude.com/docs/en",
5
5
  "title": "Claude Code Format",
6
6
  "description": "JSON Schema for Claude Code agents, skills, and slash commands format",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/continue.json",
4
- "$comment": "Official documentation: https://docs.continue.dev/customize/deep-dives/rules",
4
+ "$comment": "https://docs.continue.dev/customize/deep-dives/rules",
5
5
  "title": "Continue Rules Format",
6
6
  "description": "JSON Schema for Continue rules format - markdown with optional YAML frontmatter or YAML configuration",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/copilot.json",
4
- "$comment": "Official documentation: https://docs.github.com/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot",
4
+ "$comment": "https://docs.github.com/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot",
5
5
  "title": "GitHub Copilot Instructions Format",
6
6
  "description": "JSON Schema for GitHub Copilot instructions (.github/copilot-instructions.md or .github/instructions/*.instructions.md)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/cursor/command.json",
4
- "$comment": "Official documentation: https://cursor.com/docs/agent/chat/commands#commands",
4
+ "$comment": "https://cursor.com/docs/agent/chat/commands#commands",
5
5
  "title": "Cursor Command Format",
6
6
  "description": "JSON Schema for Cursor commands (slash commands) - plain Markdown files in .cursor/commands/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/cursor.json",
4
- "$comment": "Official documentation: https://cursor.com/docs/context/rules",
4
+ "$comment": "https://cursor.com/docs/context/rules",
5
5
  "title": "Cursor Rules Format",
6
6
  "description": "JSON Schema for Cursor .cursor/rules format with MDC (Markdown Components) frontmatter",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/droid/hook.json",
4
- "$comment": "Official documentation: https://docs.factory.ai/cli/configuration/hooks",
4
+ "$comment": "https://docs.factory.ai/cli/configuration/hooks",
5
5
  "title": "Factory Droid Hook Format",
6
6
  "description": "JSON Schema for Factory Droid Hooks - defined in settings.json files. Valid hook events: PreToolUse (runs before tool calls, can block them), PostToolUse (runs after tool calls complete), UserPromptSubmit (runs when user submits a prompt, before Droid processes it), Notification (runs when Droid sends notifications), Stop (runs when Droid finishes responding), SubagentStop (runs when sub-droid tasks complete), PreCompact (runs before Droid runs a compact operation), SessionStart (runs when Droid starts a new session or resumes an existing session), SessionEnd (runs when Droid session ends)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/droid/skill.json",
4
- "$comment": "Official documentation: https://docs.factory.ai/cli/configuration/skills",
4
+ "$comment": "https://docs.factory.ai/cli/configuration/skills",
5
5
  "title": "Factory Droid Skill Format",
6
6
  "description": "JSON Schema for Factory Droid Skills - SKILL.md files stored in .factory/skills/<skill-name>/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/droid/slash-command.json",
4
- "$comment": "Official documentation: https://docs.factory.ai/cli/configuration/custom-slash-commands",
4
+ "$comment": "https://docs.factory.ai/cli/configuration/custom-slash-commands",
5
5
  "title": "Factory Droid Slash Command Format",
6
6
  "description": "JSON Schema for Factory Droid Slash Commands - markdown files stored in .factory/commands/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/droid.json",
4
- "$comment": "Official documentation: https://docs.factory.ai/cli/configuration",
4
+ "$comment": "https://docs.factory.ai/cli/configuration",
5
5
  "title": "Factory Droid Format",
6
6
  "description": "JSON Schema for Factory Droid Skills, Hooks, and Slash Commands",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/gemini-md.json",
4
- "$comment": "Official documentation: https://geminicli.com/docs/cli/gemini-md/#_top",
4
+ "$comment": "https://geminicli.com/docs/cli/gemini-md/#_top",
5
5
  "title": "GEMINI.md Format",
6
6
  "description": "JSON Schema for GEMINI.md format - plain markdown project-specific AI instructions (NO frontmatter)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/gemini.json",
4
- "$comment": "Official documentation: https://geminicli.com/docs/cli/custom-commands/",
4
+ "$comment": "https://geminicli.com/docs/cli/custom-commands/",
5
5
  "title": "Gemini Custom Commands Format",
6
6
  "description": "JSON Schema for Gemini CLI custom commands - TOML files stored in .gemini/commands/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/kiro/agent.json",
4
- "$comment": "Official documentation: https://kiro.dev/docs/cli/custom-agents/",
4
+ "$comment": "https://kiro.dev/docs/cli/custom-agents/",
5
5
  "title": "Kiro Agent Configuration Format",
6
6
  "description": "JSON Schema for Kiro custom agent configurations (.kiro/agents/*.json) - specialized AI assistants with specific tools and context",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/kiro/hook.json",
4
- "$comment": "Official documentation: https://kiro.dev/docs/hooks/",
4
+ "$comment": "https://kiro.dev/docs/hooks/",
5
5
  "title": "Kiro Hook Format",
6
6
  "description": "JSON Schema for Kiro hook configuration files (.kiro/hooks/*.json) - event-driven automations",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/kiro-steering.json",
4
- "$comment": "Official documentation: https://kiro.dev/docs/steering/",
4
+ "$comment": "https://kiro.dev/docs/steering/",
5
5
  "title": "Kiro Steering Files Format",
6
6
  "description": "JSON Schema for Kiro steering files (.kiro/steering/*.md) - context-aware instructions with optional frontmatter (defaults to 'always' inclusion)",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/opencode/slash-command.json",
4
- "$comment": "Official documentation: https://opencode.ai/docs/slash-commands/",
4
+ "$comment": "https://opencode.ai/docs/slash-commands/",
5
5
  "title": "OpenCode Slash Command Format",
6
6
  "description": "JSON Schema for OpenCode Slash Commands - markdown files with YAML frontmatter stored in .opencode/command/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/opencode.json",
4
- "$comment": "Official documentation: https://opencode.ai/docs/agents/",
4
+ "$comment": "https://opencode.ai/docs/agents/",
5
5
  "title": "OpenCode Agent Format",
6
6
  "description": "JSON Schema for OpenCode Agents - markdown files with YAML frontmatter stored in .opencode/agent/",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/ruler.json",
4
- "$comment": "Official documentation: https://okigu.com/ruler",
4
+ "$comment": "https://okigu.com/ruler",
5
5
  "title": "Ruler Rules Format",
6
6
  "description": "JSON Schema for Ruler .ruler/ format - plain markdown without frontmatter, used for AI coding assistant instructions",
7
7
  "type": "object",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://registry.prpm.dev/api/v1/schemas/windsurf.json",
4
- "$comment": "Official documentation: https://docs.windsurf.com/windsurf/cascade/memories#rules",
4
+ "$comment": "https://docs.windsurf.com/windsurf/cascade/memories#rules",
5
5
  "title": "Windsurf Rules Format",
6
6
  "description": "JSON Schema for Windsurf .windsurf/rules format - plain markdown without frontmatter",
7
7
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prpm",
3
- "version": "1.1.8",
3
+ "version": "1.1.9",
4
4
  "description": "Prompt Package Manager CLI - Install and manage prompt-based files",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -45,9 +45,9 @@
45
45
  "license": "MIT",
46
46
  "dependencies": {
47
47
  "@octokit/rest": "^22.0.0",
48
- "@pr-pm/converters": "^1.1.8",
49
- "@pr-pm/registry-client": "^2.1.8",
50
- "@pr-pm/types": "^1.1.8",
48
+ "@pr-pm/converters": "^1.1.9",
49
+ "@pr-pm/registry-client": "^2.1.9",
50
+ "@pr-pm/types": "^1.1.9",
51
51
  "ajv": "^8.17.1",
52
52
  "ajv-formats": "^3.0.1",
53
53
  "commander": "^11.1.0",