prpm 2.1.22 → 2.1.24
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 +561 -7
- package/dist/schemas/amp-command.schema.json +37 -0
- package/dist/schemas/amp.schema.json +48 -0
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -830,6 +830,8 @@ function normalizeFormat(sourceFormat) {
|
|
|
830
830
|
return "zed";
|
|
831
831
|
if (normalized.includes("mcp"))
|
|
832
832
|
return "mcp";
|
|
833
|
+
if (normalized.includes("amp"))
|
|
834
|
+
return "amp";
|
|
833
835
|
return "generic";
|
|
834
836
|
}
|
|
835
837
|
var CLI_SUPPORTED_FORMATS;
|
|
@@ -854,7 +856,8 @@ var init_taxonomy_utils = __esm({
|
|
|
854
856
|
"replit",
|
|
855
857
|
"zencoder",
|
|
856
858
|
"droid",
|
|
857
|
-
"codex"
|
|
859
|
+
"codex",
|
|
860
|
+
"amp"
|
|
858
861
|
];
|
|
859
862
|
}
|
|
860
863
|
});
|
|
@@ -8765,6 +8768,91 @@ var init_from_codex = __esm({
|
|
|
8765
8768
|
}
|
|
8766
8769
|
});
|
|
8767
8770
|
|
|
8771
|
+
// ../converters/dist/from-amp.js
|
|
8772
|
+
function parseFrontmatter9(content) {
|
|
8773
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
8774
|
+
if (!match) {
|
|
8775
|
+
return { frontmatter: {}, body: content };
|
|
8776
|
+
}
|
|
8777
|
+
const frontmatter = jsYaml.load(match[1]);
|
|
8778
|
+
const body = match[2];
|
|
8779
|
+
return { frontmatter, body };
|
|
8780
|
+
}
|
|
8781
|
+
function detectSubtype2(frontmatter) {
|
|
8782
|
+
if (frontmatter.name && frontmatter.description) {
|
|
8783
|
+
return "skill";
|
|
8784
|
+
}
|
|
8785
|
+
if (frontmatter.description && !frontmatter.name) {
|
|
8786
|
+
return "slash-command";
|
|
8787
|
+
}
|
|
8788
|
+
return "rule";
|
|
8789
|
+
}
|
|
8790
|
+
function fromAmp(content, metadata, subtypeHint) {
|
|
8791
|
+
const { frontmatter, body } = parseFrontmatter9(content);
|
|
8792
|
+
const fm = frontmatter;
|
|
8793
|
+
const sections = [];
|
|
8794
|
+
const detectedSubtype = subtypeHint || detectSubtype2(frontmatter);
|
|
8795
|
+
const metadataSection = {
|
|
8796
|
+
type: "metadata",
|
|
8797
|
+
data: {
|
|
8798
|
+
title: fm.name || metadata.name || metadata.id,
|
|
8799
|
+
description: fm.description || metadata.description || "",
|
|
8800
|
+
version: metadata.version || "1.0.0",
|
|
8801
|
+
author: metadata.author
|
|
8802
|
+
}
|
|
8803
|
+
};
|
|
8804
|
+
const skillFm = fm;
|
|
8805
|
+
const agentsFm = fm;
|
|
8806
|
+
if (detectedSubtype === "skill") {
|
|
8807
|
+
if (skillFm["argument-hint"] || skillFm["disable-model-invocation"] !== void 0) {
|
|
8808
|
+
metadataSection.data.amp = {
|
|
8809
|
+
argumentHint: skillFm["argument-hint"],
|
|
8810
|
+
disableModelInvocation: skillFm["disable-model-invocation"]
|
|
8811
|
+
};
|
|
8812
|
+
}
|
|
8813
|
+
} else if (agentsFm.globs) {
|
|
8814
|
+
const globs = Array.isArray(agentsFm.globs) ? agentsFm.globs : [agentsFm.globs];
|
|
8815
|
+
metadataSection.data.amp = {
|
|
8816
|
+
globs
|
|
8817
|
+
};
|
|
8818
|
+
}
|
|
8819
|
+
sections.push(metadataSection);
|
|
8820
|
+
if (body.trim()) {
|
|
8821
|
+
sections.push({
|
|
8822
|
+
type: "instructions",
|
|
8823
|
+
title: "Instructions",
|
|
8824
|
+
content: body.trim()
|
|
8825
|
+
});
|
|
8826
|
+
}
|
|
8827
|
+
const canonicalContent = {
|
|
8828
|
+
format: "canonical",
|
|
8829
|
+
version: "1.0",
|
|
8830
|
+
sections
|
|
8831
|
+
};
|
|
8832
|
+
const pkg = {
|
|
8833
|
+
...metadata,
|
|
8834
|
+
id: metadata.id,
|
|
8835
|
+
name: fm.name || metadata.name || metadata.id,
|
|
8836
|
+
version: metadata.version,
|
|
8837
|
+
author: metadata.author,
|
|
8838
|
+
description: metadata.description || fm.description || "",
|
|
8839
|
+
tags: metadata.tags || [],
|
|
8840
|
+
format: "amp",
|
|
8841
|
+
subtype: detectedSubtype,
|
|
8842
|
+
content: canonicalContent
|
|
8843
|
+
};
|
|
8844
|
+
setTaxonomy(pkg, "amp", detectedSubtype);
|
|
8845
|
+
return pkg;
|
|
8846
|
+
}
|
|
8847
|
+
var init_from_amp = __esm({
|
|
8848
|
+
"../converters/dist/from-amp.js"() {
|
|
8849
|
+
"use strict";
|
|
8850
|
+
init_cjs_shims();
|
|
8851
|
+
init_taxonomy_utils();
|
|
8852
|
+
init_js_yaml();
|
|
8853
|
+
}
|
|
8854
|
+
});
|
|
8855
|
+
|
|
8768
8856
|
// ../converters/dist/from-mcp-server.js
|
|
8769
8857
|
function fromMCPServer(mcpServerJson, metadata) {
|
|
8770
8858
|
var _a;
|
|
@@ -8892,6 +8980,8 @@ function loadSchema(format, subtype) {
|
|
|
8892
8980
|
"opencode:skill": "agent-skills.schema.json",
|
|
8893
8981
|
"codex:skill": "agent-skills.schema.json",
|
|
8894
8982
|
"gemini:extension": "gemini-extension.schema.json",
|
|
8983
|
+
"amp:skill": "agent-skills.schema.json",
|
|
8984
|
+
"amp:slash-command": "amp-command.schema.json",
|
|
8895
8985
|
"mcp:server": "mcp-server.schema.json"
|
|
8896
8986
|
};
|
|
8897
8987
|
schemaFilename = subtypeSchemaMap[cacheKey];
|
|
@@ -8913,6 +9003,7 @@ function loadSchema(format, subtype) {
|
|
|
8913
9003
|
"aider": "aider.schema.json",
|
|
8914
9004
|
"zencoder": "zencoder.schema.json",
|
|
8915
9005
|
"replit": "replit.schema.json",
|
|
9006
|
+
"amp": "amp.schema.json",
|
|
8916
9007
|
"canonical": "canonical.schema.json"
|
|
8917
9008
|
// generic and mcp don't have specific schemas, will use fallback
|
|
8918
9009
|
};
|
|
@@ -8953,8 +9044,14 @@ function validateFormat(format, data, subtype) {
|
|
|
8953
9044
|
const warnings = [];
|
|
8954
9045
|
if (!valid && validate.errors) {
|
|
8955
9046
|
for (const error of validate.errors) {
|
|
8956
|
-
const
|
|
8957
|
-
const
|
|
9047
|
+
const params = error.params;
|
|
9048
|
+
const path12 = error.instancePath || "/" + (params.missingProperty || "");
|
|
9049
|
+
let message = error.message || "Validation error";
|
|
9050
|
+
if (error.keyword === "additionalProperties" && params.additionalProperty) {
|
|
9051
|
+
message = `${message}: '${params.additionalProperty}'`;
|
|
9052
|
+
} else if (error.keyword === "enum" && params.allowedValues) {
|
|
9053
|
+
message = `${message}. Allowed values: ${params.allowedValues.join(", ")}`;
|
|
9054
|
+
}
|
|
8958
9055
|
const validationError = {
|
|
8959
9056
|
path: path12,
|
|
8960
9057
|
message: `${path12}: ${message}`,
|
|
@@ -12811,6 +12908,130 @@ var init_to_codex = __esm({
|
|
|
12811
12908
|
}
|
|
12812
12909
|
});
|
|
12813
12910
|
|
|
12911
|
+
// ../converters/dist/to-amp.js
|
|
12912
|
+
function toAmp(pkg) {
|
|
12913
|
+
const warnings = [];
|
|
12914
|
+
let qualityScore = 100;
|
|
12915
|
+
try {
|
|
12916
|
+
const content = convertContent15(pkg, warnings);
|
|
12917
|
+
const lossyConversion = warnings.some((w) => w.includes("not supported") || w.includes("skipped"));
|
|
12918
|
+
if (lossyConversion) {
|
|
12919
|
+
qualityScore -= 10;
|
|
12920
|
+
}
|
|
12921
|
+
return {
|
|
12922
|
+
content,
|
|
12923
|
+
format: "amp",
|
|
12924
|
+
warnings: warnings.length > 0 ? warnings : void 0,
|
|
12925
|
+
lossyConversion,
|
|
12926
|
+
qualityScore
|
|
12927
|
+
};
|
|
12928
|
+
} catch (error) {
|
|
12929
|
+
warnings.push(`Conversion error: ${error instanceof Error ? error.message : String(error)}`);
|
|
12930
|
+
return {
|
|
12931
|
+
content: "",
|
|
12932
|
+
format: "amp",
|
|
12933
|
+
warnings,
|
|
12934
|
+
lossyConversion: true,
|
|
12935
|
+
qualityScore: 0
|
|
12936
|
+
};
|
|
12937
|
+
}
|
|
12938
|
+
}
|
|
12939
|
+
function convertContent15(pkg, warnings) {
|
|
12940
|
+
const lines = [];
|
|
12941
|
+
const metadata = pkg.content.sections.find((s) => s.type === "metadata");
|
|
12942
|
+
const frontmatter = {};
|
|
12943
|
+
const ampData = (metadata == null ? void 0 : metadata.type) === "metadata" ? metadata.data.amp : void 0;
|
|
12944
|
+
if (pkg.subtype === "skill") {
|
|
12945
|
+
const skillName = pkg.name || pkg.id;
|
|
12946
|
+
frontmatter.name = skillName.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
12947
|
+
if ((metadata == null ? void 0 : metadata.type) === "metadata" && metadata.data.description) {
|
|
12948
|
+
frontmatter.description = metadata.data.description;
|
|
12949
|
+
} else {
|
|
12950
|
+
frontmatter.description = pkg.description || "No description provided";
|
|
12951
|
+
warnings.push("REQUIRED description field missing, using package description");
|
|
12952
|
+
}
|
|
12953
|
+
if (ampData == null ? void 0 : ampData.argumentHint) {
|
|
12954
|
+
frontmatter["argument-hint"] = ampData.argumentHint;
|
|
12955
|
+
}
|
|
12956
|
+
if ((ampData == null ? void 0 : ampData.disableModelInvocation) !== void 0) {
|
|
12957
|
+
frontmatter["disable-model-invocation"] = ampData.disableModelInvocation;
|
|
12958
|
+
}
|
|
12959
|
+
} else if (pkg.subtype === "slash-command") {
|
|
12960
|
+
if ((metadata == null ? void 0 : metadata.type) === "metadata" && metadata.data.description) {
|
|
12961
|
+
frontmatter.description = metadata.data.description;
|
|
12962
|
+
}
|
|
12963
|
+
} else {
|
|
12964
|
+
if ((ampData == null ? void 0 : ampData.globs) && ampData.globs.length > 0) {
|
|
12965
|
+
frontmatter.globs = ampData.globs;
|
|
12966
|
+
}
|
|
12967
|
+
}
|
|
12968
|
+
const hasFrontmatter = Object.keys(frontmatter).length > 0;
|
|
12969
|
+
if (hasFrontmatter) {
|
|
12970
|
+
lines.push("---");
|
|
12971
|
+
lines.push(jsYaml.dump(frontmatter, { indent: 2, lineWidth: -1 }).trim());
|
|
12972
|
+
lines.push("---");
|
|
12973
|
+
lines.push("");
|
|
12974
|
+
}
|
|
12975
|
+
const contentSections = pkg.content.sections.filter((s) => s.type !== "metadata" && s.type !== "tools");
|
|
12976
|
+
for (const section of contentSections) {
|
|
12977
|
+
if (section.type === "persona") {
|
|
12978
|
+
if (section.data.role) {
|
|
12979
|
+
lines.push(`You are a ${section.data.role}.`);
|
|
12980
|
+
lines.push("");
|
|
12981
|
+
}
|
|
12982
|
+
} else if (section.type === "instructions") {
|
|
12983
|
+
if (section.title && section.title !== "Overview" && section.title !== "Instructions") {
|
|
12984
|
+
lines.push(`## ${section.title}`);
|
|
12985
|
+
lines.push("");
|
|
12986
|
+
}
|
|
12987
|
+
lines.push(section.content);
|
|
12988
|
+
lines.push("");
|
|
12989
|
+
} else if (section.type === "rules") {
|
|
12990
|
+
const rulesTitle = section.title || "Rules";
|
|
12991
|
+
lines.push(`## ${rulesTitle}`);
|
|
12992
|
+
lines.push("");
|
|
12993
|
+
for (const rule of section.items) {
|
|
12994
|
+
lines.push(`- ${rule.content}`);
|
|
12995
|
+
}
|
|
12996
|
+
lines.push("");
|
|
12997
|
+
} else if (section.type === "examples") {
|
|
12998
|
+
const examplesTitle = section.title || "Examples";
|
|
12999
|
+
lines.push(`## ${examplesTitle}`);
|
|
13000
|
+
lines.push("");
|
|
13001
|
+
for (const example of section.examples) {
|
|
13002
|
+
if (example.description) {
|
|
13003
|
+
lines.push(`### ${example.description}`);
|
|
13004
|
+
lines.push("");
|
|
13005
|
+
}
|
|
13006
|
+
const lang = example.language || "";
|
|
13007
|
+
lines.push("```" + lang);
|
|
13008
|
+
lines.push(example.code);
|
|
13009
|
+
lines.push("```");
|
|
13010
|
+
lines.push("");
|
|
13011
|
+
}
|
|
13012
|
+
} else if (section.type === "context") {
|
|
13013
|
+
const contextTitle = section.title || "Context";
|
|
13014
|
+
lines.push(`## ${contextTitle}`);
|
|
13015
|
+
lines.push("");
|
|
13016
|
+
lines.push(section.content);
|
|
13017
|
+
lines.push("");
|
|
13018
|
+
} else if (section.type === "hook" || section.type === "cursor-hook") {
|
|
13019
|
+
warnings.push(`Hook sections are not supported in Amp format`);
|
|
13020
|
+
} else if (section.type !== "custom" && section.type !== "file-reference") {
|
|
13021
|
+
const sectionType = section.type;
|
|
13022
|
+
warnings.push(`Section type '${sectionType}' may not be fully supported in Amp format`);
|
|
13023
|
+
}
|
|
13024
|
+
}
|
|
13025
|
+
return lines.join("\n").trim() + "\n";
|
|
13026
|
+
}
|
|
13027
|
+
var init_to_amp = __esm({
|
|
13028
|
+
"../converters/dist/to-amp.js"() {
|
|
13029
|
+
"use strict";
|
|
13030
|
+
init_cjs_shims();
|
|
13031
|
+
init_js_yaml();
|
|
13032
|
+
}
|
|
13033
|
+
});
|
|
13034
|
+
|
|
12814
13035
|
// ../converters/dist/to-mcp-server.js
|
|
12815
13036
|
function toMCPServer(pkg) {
|
|
12816
13037
|
var _a, _b;
|
|
@@ -13396,6 +13617,41 @@ var init_format_registry = __esm({
|
|
|
13396
13617
|
fileExtension: ".json"
|
|
13397
13618
|
}
|
|
13398
13619
|
}
|
|
13620
|
+
},
|
|
13621
|
+
amp: {
|
|
13622
|
+
name: "Amp",
|
|
13623
|
+
description: "Amp code editor skills, commands, and AGENTS.md",
|
|
13624
|
+
documentationUrl: "https://ampcode.com/manual",
|
|
13625
|
+
rootFiles: ["AGENTS.md", "AGENT.md", "CLAUDE.md"],
|
|
13626
|
+
defaultSubtype: "skill",
|
|
13627
|
+
subtypes: {
|
|
13628
|
+
skill: {
|
|
13629
|
+
directory: ".agents/skills",
|
|
13630
|
+
filePatterns: ["SKILL.md"],
|
|
13631
|
+
nested: true,
|
|
13632
|
+
nestedIndicator: "SKILL.md",
|
|
13633
|
+
usesPackageSubdirectory: true,
|
|
13634
|
+
fileExtension: ".md"
|
|
13635
|
+
},
|
|
13636
|
+
"slash-command": {
|
|
13637
|
+
directory: ".agents/commands",
|
|
13638
|
+
filePatterns: ["*.md"],
|
|
13639
|
+
fileExtension: ".md"
|
|
13640
|
+
},
|
|
13641
|
+
rule: {
|
|
13642
|
+
directory: ".",
|
|
13643
|
+
filePatterns: ["AGENTS.md"],
|
|
13644
|
+
fileExtension: ".md"
|
|
13645
|
+
},
|
|
13646
|
+
agent: {
|
|
13647
|
+
directory: ".openagents",
|
|
13648
|
+
filePatterns: ["AGENT.md"],
|
|
13649
|
+
nested: true,
|
|
13650
|
+
nestedIndicator: "AGENT.md",
|
|
13651
|
+
usesPackageSubdirectory: true,
|
|
13652
|
+
fileExtension: ".md"
|
|
13653
|
+
}
|
|
13654
|
+
}
|
|
13399
13655
|
}
|
|
13400
13656
|
}
|
|
13401
13657
|
};
|
|
@@ -13695,6 +13951,281 @@ var init_progressive_disclosure = __esm({
|
|
|
13695
13951
|
}
|
|
13696
13952
|
});
|
|
13697
13953
|
|
|
13954
|
+
// ../converters/dist/cross-converters/mcp-transformer.js
|
|
13955
|
+
function geminiToClaudeMCP(geminiServers) {
|
|
13956
|
+
const warnings = [];
|
|
13957
|
+
const servers = {};
|
|
13958
|
+
let lossless = true;
|
|
13959
|
+
for (const [name, config] of Object.entries(geminiServers)) {
|
|
13960
|
+
servers[name] = {
|
|
13961
|
+
command: config.command
|
|
13962
|
+
};
|
|
13963
|
+
if (config.args) {
|
|
13964
|
+
servers[name].args = [...config.args];
|
|
13965
|
+
}
|
|
13966
|
+
if (config.env) {
|
|
13967
|
+
servers[name].env = { ...config.env };
|
|
13968
|
+
const hasGeminiVars = Object.values(config.env).some((val) => typeof val === "string" && (val.includes("${extensionPath}") || val.includes("${home}")));
|
|
13969
|
+
if (hasGeminiVars) {
|
|
13970
|
+
warnings.push(`MCP server '${name}' uses Gemini variable substitutions (\${extensionPath}, \${home}). Claude uses different variable syntax - manual adjustment may be needed.`);
|
|
13971
|
+
lossless = false;
|
|
13972
|
+
}
|
|
13973
|
+
}
|
|
13974
|
+
if (config.disabled !== void 0) {
|
|
13975
|
+
servers[name].disabled = config.disabled;
|
|
13976
|
+
}
|
|
13977
|
+
}
|
|
13978
|
+
return {
|
|
13979
|
+
servers,
|
|
13980
|
+
warnings,
|
|
13981
|
+
lossless
|
|
13982
|
+
};
|
|
13983
|
+
}
|
|
13984
|
+
function claudeToGeminiMCP(claudeServers) {
|
|
13985
|
+
const warnings = [];
|
|
13986
|
+
const servers = {};
|
|
13987
|
+
let lossless = true;
|
|
13988
|
+
for (const [name, config] of Object.entries(claudeServers)) {
|
|
13989
|
+
servers[name] = {
|
|
13990
|
+
command: config.command
|
|
13991
|
+
};
|
|
13992
|
+
if (config.args) {
|
|
13993
|
+
servers[name].args = [...config.args];
|
|
13994
|
+
}
|
|
13995
|
+
if (config.env) {
|
|
13996
|
+
servers[name].env = { ...config.env };
|
|
13997
|
+
const hasClaudePatterns = Object.values(config.env).some((val) => val.includes("${CLAUDE_") || val.includes("%APPDATA%"));
|
|
13998
|
+
if (hasClaudePatterns) {
|
|
13999
|
+
warnings.push(`MCP server '${name}' uses Claude-specific patterns. Consider using Gemini variable syntax: \${extensionPath}, \${home}`);
|
|
14000
|
+
lossless = false;
|
|
14001
|
+
}
|
|
14002
|
+
}
|
|
14003
|
+
if (config.disabled !== void 0) {
|
|
14004
|
+
servers[name].disabled = config.disabled;
|
|
14005
|
+
}
|
|
14006
|
+
}
|
|
14007
|
+
return {
|
|
14008
|
+
servers,
|
|
14009
|
+
warnings,
|
|
14010
|
+
lossless
|
|
14011
|
+
};
|
|
14012
|
+
}
|
|
14013
|
+
function validateMCPServer(config) {
|
|
14014
|
+
const errors = [];
|
|
14015
|
+
if (!config.command) {
|
|
14016
|
+
errors.push("MCP server must have a command");
|
|
14017
|
+
}
|
|
14018
|
+
if (config.args && !Array.isArray(config.args)) {
|
|
14019
|
+
errors.push("MCP server args must be an array");
|
|
14020
|
+
}
|
|
14021
|
+
if (config.env !== void 0 && (typeof config.env !== "object" || config.env === null)) {
|
|
14022
|
+
errors.push("MCP server env must be an object");
|
|
14023
|
+
}
|
|
14024
|
+
if (config.disabled !== void 0 && typeof config.disabled !== "boolean") {
|
|
14025
|
+
errors.push("MCP server disabled must be a boolean");
|
|
14026
|
+
}
|
|
14027
|
+
return errors;
|
|
14028
|
+
}
|
|
14029
|
+
function mergeMCPServers(...serverSets) {
|
|
14030
|
+
const warnings = [];
|
|
14031
|
+
const servers = {};
|
|
14032
|
+
let lossless = true;
|
|
14033
|
+
for (const serverSet of serverSets) {
|
|
14034
|
+
for (const [name, config] of Object.entries(serverSet)) {
|
|
14035
|
+
if (servers[name]) {
|
|
14036
|
+
warnings.push(`MCP server '${name}' defined multiple times. Using latest definition.`);
|
|
14037
|
+
lossless = false;
|
|
14038
|
+
}
|
|
14039
|
+
servers[name] = { ...config };
|
|
14040
|
+
}
|
|
14041
|
+
}
|
|
14042
|
+
return {
|
|
14043
|
+
servers,
|
|
14044
|
+
warnings,
|
|
14045
|
+
lossless
|
|
14046
|
+
};
|
|
14047
|
+
}
|
|
14048
|
+
function kiroToClaudeMCP(kiroServers) {
|
|
14049
|
+
const warnings = [];
|
|
14050
|
+
const servers = {};
|
|
14051
|
+
let lossless = true;
|
|
14052
|
+
for (const [name, config] of Object.entries(kiroServers)) {
|
|
14053
|
+
servers[name] = {
|
|
14054
|
+
command: config.command
|
|
14055
|
+
};
|
|
14056
|
+
if (config.args) {
|
|
14057
|
+
servers[name].args = [...config.args];
|
|
14058
|
+
}
|
|
14059
|
+
if (config.env) {
|
|
14060
|
+
servers[name].env = { ...config.env };
|
|
14061
|
+
}
|
|
14062
|
+
if (config.disabled !== void 0) {
|
|
14063
|
+
servers[name].disabled = config.disabled;
|
|
14064
|
+
}
|
|
14065
|
+
if (config.timeout !== void 0) {
|
|
14066
|
+
warnings.push(`MCP server '${name}' has timeout=${config.timeout}ms which is not supported in Claude format. This field will be lost.`);
|
|
14067
|
+
lossless = false;
|
|
14068
|
+
}
|
|
14069
|
+
}
|
|
14070
|
+
return {
|
|
14071
|
+
servers,
|
|
14072
|
+
warnings,
|
|
14073
|
+
lossless
|
|
14074
|
+
};
|
|
14075
|
+
}
|
|
14076
|
+
function claudeToKiroMCP(claudeServers) {
|
|
14077
|
+
const warnings = [];
|
|
14078
|
+
const servers = {};
|
|
14079
|
+
let lossless = true;
|
|
14080
|
+
for (const [name, config] of Object.entries(claudeServers)) {
|
|
14081
|
+
servers[name] = {
|
|
14082
|
+
command: config.command
|
|
14083
|
+
};
|
|
14084
|
+
if (config.args) {
|
|
14085
|
+
servers[name].args = [...config.args];
|
|
14086
|
+
}
|
|
14087
|
+
if (config.env) {
|
|
14088
|
+
servers[name].env = { ...config.env };
|
|
14089
|
+
}
|
|
14090
|
+
if (config.disabled !== void 0) {
|
|
14091
|
+
servers[name].disabled = config.disabled;
|
|
14092
|
+
}
|
|
14093
|
+
}
|
|
14094
|
+
return {
|
|
14095
|
+
servers,
|
|
14096
|
+
warnings,
|
|
14097
|
+
lossless
|
|
14098
|
+
};
|
|
14099
|
+
}
|
|
14100
|
+
function kiroToGeminiMCP(kiroServers) {
|
|
14101
|
+
const warnings = [];
|
|
14102
|
+
const servers = {};
|
|
14103
|
+
let lossless = true;
|
|
14104
|
+
for (const [name, config] of Object.entries(kiroServers)) {
|
|
14105
|
+
servers[name] = {
|
|
14106
|
+
command: config.command
|
|
14107
|
+
};
|
|
14108
|
+
if (config.args) {
|
|
14109
|
+
servers[name].args = [...config.args];
|
|
14110
|
+
}
|
|
14111
|
+
if (config.env) {
|
|
14112
|
+
servers[name].env = { ...config.env };
|
|
14113
|
+
}
|
|
14114
|
+
if (config.disabled !== void 0) {
|
|
14115
|
+
servers[name].disabled = config.disabled;
|
|
14116
|
+
}
|
|
14117
|
+
if (config.timeout !== void 0) {
|
|
14118
|
+
warnings.push(`MCP server '${name}' has timeout=${config.timeout}ms which is not supported in Gemini format. This field will be lost.`);
|
|
14119
|
+
lossless = false;
|
|
14120
|
+
}
|
|
14121
|
+
}
|
|
14122
|
+
return {
|
|
14123
|
+
servers,
|
|
14124
|
+
warnings,
|
|
14125
|
+
lossless
|
|
14126
|
+
};
|
|
14127
|
+
}
|
|
14128
|
+
function geminiToKiroMCP(geminiServers) {
|
|
14129
|
+
const warnings = [];
|
|
14130
|
+
const servers = {};
|
|
14131
|
+
let lossless = true;
|
|
14132
|
+
for (const [name, config] of Object.entries(geminiServers)) {
|
|
14133
|
+
servers[name] = {
|
|
14134
|
+
command: config.command
|
|
14135
|
+
};
|
|
14136
|
+
if (config.args) {
|
|
14137
|
+
servers[name].args = [...config.args];
|
|
14138
|
+
}
|
|
14139
|
+
if (config.env) {
|
|
14140
|
+
servers[name].env = { ...config.env };
|
|
14141
|
+
const hasGeminiVars = Object.values(config.env).some((val) => typeof val === "string" && (val.includes("${extensionPath}") || val.includes("${home}")));
|
|
14142
|
+
if (hasGeminiVars) {
|
|
14143
|
+
warnings.push(`MCP server '${name}' uses Gemini variable substitutions (\${extensionPath}, \${home}). These may need manual adjustment for Kiro.`);
|
|
14144
|
+
lossless = false;
|
|
14145
|
+
}
|
|
14146
|
+
}
|
|
14147
|
+
if (config.disabled !== void 0) {
|
|
14148
|
+
servers[name].disabled = config.disabled;
|
|
14149
|
+
}
|
|
14150
|
+
}
|
|
14151
|
+
return {
|
|
14152
|
+
servers,
|
|
14153
|
+
warnings,
|
|
14154
|
+
lossless
|
|
14155
|
+
};
|
|
14156
|
+
}
|
|
14157
|
+
function translateEnvVar(envValue, direction) {
|
|
14158
|
+
let translated = false;
|
|
14159
|
+
let value = envValue;
|
|
14160
|
+
const mappings = ENV_VAR_MAPPINGS[direction];
|
|
14161
|
+
if (mappings) {
|
|
14162
|
+
for (const [from, to] of Object.entries(mappings)) {
|
|
14163
|
+
if (value.includes(from)) {
|
|
14164
|
+
value = value.replace(new RegExp(from.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), to);
|
|
14165
|
+
translated = true;
|
|
14166
|
+
}
|
|
14167
|
+
}
|
|
14168
|
+
}
|
|
14169
|
+
return { value, translated };
|
|
14170
|
+
}
|
|
14171
|
+
function translateMCPServerEnv(config, direction) {
|
|
14172
|
+
const warnings = [];
|
|
14173
|
+
if (!config.env) {
|
|
14174
|
+
return { config, warnings };
|
|
14175
|
+
}
|
|
14176
|
+
const translatedEnv = {};
|
|
14177
|
+
let anyTranslated = false;
|
|
14178
|
+
for (const [key, value] of Object.entries(config.env)) {
|
|
14179
|
+
const { value: translatedValue, translated } = translateEnvVar(value, direction);
|
|
14180
|
+
translatedEnv[key] = translatedValue;
|
|
14181
|
+
if (translated) {
|
|
14182
|
+
anyTranslated = true;
|
|
14183
|
+
}
|
|
14184
|
+
}
|
|
14185
|
+
if (anyTranslated) {
|
|
14186
|
+
warnings.push(`Environment variables were automatically translated for target format`);
|
|
14187
|
+
}
|
|
14188
|
+
return {
|
|
14189
|
+
config: { ...config, env: translatedEnv },
|
|
14190
|
+
warnings
|
|
14191
|
+
};
|
|
14192
|
+
}
|
|
14193
|
+
var ENV_VAR_MAPPINGS;
|
|
14194
|
+
var init_mcp_transformer = __esm({
|
|
14195
|
+
"../converters/dist/cross-converters/mcp-transformer.js"() {
|
|
14196
|
+
"use strict";
|
|
14197
|
+
init_cjs_shims();
|
|
14198
|
+
ENV_VAR_MAPPINGS = {
|
|
14199
|
+
"gemini-to-claude": {
|
|
14200
|
+
"${extensionPath}": "${CLAUDE_EXTENSIONS_PATH}",
|
|
14201
|
+
"${home}": "${HOME}"
|
|
14202
|
+
},
|
|
14203
|
+
"claude-to-gemini": {
|
|
14204
|
+
"${CLAUDE_EXTENSIONS_PATH}": "${extensionPath}",
|
|
14205
|
+
"${HOME}": "${home}",
|
|
14206
|
+
"%APPDATA%": "${home}"
|
|
14207
|
+
},
|
|
14208
|
+
// Kiro uses standard env vars similar to Claude
|
|
14209
|
+
"gemini-to-kiro": {
|
|
14210
|
+
"${extensionPath}": "${KIRO_EXTENSIONS_PATH}",
|
|
14211
|
+
"${home}": "${HOME}"
|
|
14212
|
+
},
|
|
14213
|
+
"kiro-to-gemini": {
|
|
14214
|
+
"${KIRO_EXTENSIONS_PATH}": "${extensionPath}",
|
|
14215
|
+
"${HOME}": "${home}",
|
|
14216
|
+
"%APPDATA%": "${home}"
|
|
14217
|
+
},
|
|
14218
|
+
// Claude and Kiro use similar env var conventions, minimal translation needed
|
|
14219
|
+
"kiro-to-claude": {
|
|
14220
|
+
"${KIRO_EXTENSIONS_PATH}": "${CLAUDE_EXTENSIONS_PATH}"
|
|
14221
|
+
},
|
|
14222
|
+
"claude-to-kiro": {
|
|
14223
|
+
"${CLAUDE_EXTENSIONS_PATH}": "${KIRO_EXTENSIONS_PATH}"
|
|
14224
|
+
}
|
|
14225
|
+
};
|
|
14226
|
+
}
|
|
14227
|
+
});
|
|
14228
|
+
|
|
13698
14229
|
// ../converters/dist/index.js
|
|
13699
14230
|
var dist_exports = {};
|
|
13700
14231
|
__export(dist_exports, {
|
|
@@ -13719,6 +14250,8 @@ __export(dist_exports, {
|
|
|
13719
14250
|
claudeSchema: () => claudeSchema,
|
|
13720
14251
|
claudeSkillSchema: () => claudeSkillSchema,
|
|
13721
14252
|
claudeSlashCommandSchema: () => claudeSlashCommandSchema,
|
|
14253
|
+
claudeToGeminiMCP: () => claudeToGeminiMCP,
|
|
14254
|
+
claudeToKiroMCP: () => claudeToKiroMCP,
|
|
13722
14255
|
codexSkillSchema: () => codexSkillSchema,
|
|
13723
14256
|
continueSchema: () => continueSchema,
|
|
13724
14257
|
copilotSchema: () => copilotSchema,
|
|
@@ -13741,6 +14274,7 @@ __export(dist_exports, {
|
|
|
13741
14274
|
formatValidationErrors: () => formatValidationErrors,
|
|
13742
14275
|
fromAgentsMd: () => fromAgentsMd,
|
|
13743
14276
|
fromAider: () => fromAider,
|
|
14277
|
+
fromAmp: () => fromAmp,
|
|
13744
14278
|
fromClaude: () => fromClaude,
|
|
13745
14279
|
fromClaudePlugin: () => fromClaudePlugin,
|
|
13746
14280
|
fromCodex: () => fromCodex,
|
|
@@ -13763,6 +14297,8 @@ __export(dist_exports, {
|
|
|
13763
14297
|
fromZencoder: () => fromZencoder,
|
|
13764
14298
|
geminiMdSchema: () => geminiMdSchema,
|
|
13765
14299
|
geminiSchema: () => geminiSchema,
|
|
14300
|
+
geminiToClaudeMCP: () => geminiToClaudeMCP,
|
|
14301
|
+
geminiToKiroMCP: () => geminiToKiroMCP,
|
|
13766
14302
|
generateCodexFilename: () => generateFilename2,
|
|
13767
14303
|
generateMCPServerPackage: () => generateMCPServerPackage,
|
|
13768
14304
|
generatePluginJson: () => generatePluginJson,
|
|
@@ -13811,8 +14347,11 @@ __export(dist_exports, {
|
|
|
13811
14347
|
kiroAgentSchema: () => kiroAgentSchema,
|
|
13812
14348
|
kiroHookSchema: () => kiroHookSchema,
|
|
13813
14349
|
kiroSteeringSchema: () => kiroSteeringSchema,
|
|
14350
|
+
kiroToClaudeMCP: () => kiroToClaudeMCP,
|
|
14351
|
+
kiroToGeminiMCP: () => kiroToGeminiMCP,
|
|
13814
14352
|
mapHook: () => mapHook,
|
|
13815
14353
|
mapHooks: () => mapHooks,
|
|
14354
|
+
mergeMCPServerConfigs: () => mergeMCPServers,
|
|
13816
14355
|
normalizeFormat: () => normalizeFormat,
|
|
13817
14356
|
opencodeSchema: () => opencodeSchema,
|
|
13818
14357
|
opencodeSlashCommandSchema: () => opencodeSlashCommandSchema,
|
|
@@ -13826,6 +14365,7 @@ __export(dist_exports, {
|
|
|
13826
14365
|
supportsAgentsMd: () => supportsAgentsMd,
|
|
13827
14366
|
toAgentsMd: () => toAgentsMd,
|
|
13828
14367
|
toAider: () => toAider,
|
|
14368
|
+
toAmp: () => toAmp,
|
|
13829
14369
|
toClaude: () => toClaude,
|
|
13830
14370
|
toClaudeMd: () => toClaudeMd,
|
|
13831
14371
|
toClaudePlugin: () => toClaudePlugin,
|
|
@@ -13848,8 +14388,11 @@ __export(dist_exports, {
|
|
|
13848
14388
|
toZed: () => toZed,
|
|
13849
14389
|
toZencoder: () => toZencoder,
|
|
13850
14390
|
traeSchema: () => traeSchema,
|
|
14391
|
+
translateEnvVar: () => translateEnvVar,
|
|
14392
|
+
translateMCPServerEnv: () => translateMCPServerEnv,
|
|
13851
14393
|
validateConversion: () => validateConversion,
|
|
13852
14394
|
validateFormat: () => validateFormat,
|
|
14395
|
+
validateMCPServer: () => validateMCPServer,
|
|
13853
14396
|
validateMarkdown: () => validateMarkdown,
|
|
13854
14397
|
windsurfSchema: () => windsurfSchema,
|
|
13855
14398
|
zedSchema: () => zedSchema,
|
|
@@ -13883,6 +14426,7 @@ var init_dist = __esm({
|
|
|
13883
14426
|
init_from_replit();
|
|
13884
14427
|
init_from_zed();
|
|
13885
14428
|
init_from_codex();
|
|
14429
|
+
init_from_amp();
|
|
13886
14430
|
init_from_mcp_server();
|
|
13887
14431
|
init_to_cursor();
|
|
13888
14432
|
init_to_cursor_hooks();
|
|
@@ -13905,12 +14449,14 @@ var init_dist = __esm({
|
|
|
13905
14449
|
init_to_replit();
|
|
13906
14450
|
init_to_zed();
|
|
13907
14451
|
init_to_codex();
|
|
14452
|
+
init_to_amp();
|
|
13908
14453
|
init_to_mcp_server();
|
|
13909
14454
|
init_taxonomy_utils();
|
|
13910
14455
|
init_validation();
|
|
13911
14456
|
init_schema_files();
|
|
13912
14457
|
init_format_registry2();
|
|
13913
14458
|
init_progressive_disclosure();
|
|
14459
|
+
init_mcp_transformer();
|
|
13914
14460
|
}
|
|
13915
14461
|
});
|
|
13916
14462
|
|
|
@@ -14415,7 +14961,7 @@ function writeMCPConfig(configPath, config) {
|
|
|
14415
14961
|
}
|
|
14416
14962
|
(0, import_fs10.writeFileSync)(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
14417
14963
|
}
|
|
14418
|
-
function
|
|
14964
|
+
function mergeMCPServers2(servers, global2 = false, projectDir = process.cwd()) {
|
|
14419
14965
|
const result = {
|
|
14420
14966
|
added: [],
|
|
14421
14967
|
skipped: [],
|
|
@@ -16001,6 +16547,7 @@ function getPackageIcon2(format, subtype) {
|
|
|
16001
16547
|
"replit": "\u{1F52E}",
|
|
16002
16548
|
"zed": "\u26A1",
|
|
16003
16549
|
"codex": "\u{1F9E0}",
|
|
16550
|
+
"amp": "\u26A1",
|
|
16004
16551
|
"mcp": "\u{1F517}",
|
|
16005
16552
|
"agents.md": "\u{1F4DD}",
|
|
16006
16553
|
"ruler": "\u{1F4CF}",
|
|
@@ -16028,6 +16575,7 @@ function getPackageLabel2(format, subtype) {
|
|
|
16028
16575
|
"replit": "Replit",
|
|
16029
16576
|
"zed": "Zed",
|
|
16030
16577
|
"codex": "Codex",
|
|
16578
|
+
"amp": "Amp",
|
|
16031
16579
|
"mcp": "MCP",
|
|
16032
16580
|
"agents.md": "Agents.md",
|
|
16033
16581
|
"ruler": "Ruler",
|
|
@@ -16571,7 +17119,7 @@ This could indicate:
|
|
|
16571
17119
|
console.log(` \u2713 Installed ${commandFiles.length} commands to .claude/commands/`);
|
|
16572
17120
|
}
|
|
16573
17121
|
if (pluginConfig.mcpServers && Object.keys(pluginConfig.mcpServers).length > 0) {
|
|
16574
|
-
const mcpResult =
|
|
17122
|
+
const mcpResult = mergeMCPServers2(
|
|
16575
17123
|
pluginConfig.mcpServers,
|
|
16576
17124
|
options.global || false,
|
|
16577
17125
|
process.cwd()
|
|
@@ -16608,7 +17156,7 @@ This could indicate:
|
|
|
16608
17156
|
} catch (error2) {
|
|
16609
17157
|
throw new Error(`Failed to parse MCP server config: ${error2 instanceof Error ? error2.message : error2}`);
|
|
16610
17158
|
}
|
|
16611
|
-
const mcpResult =
|
|
17159
|
+
const mcpResult = mergeMCPServers2(mcpServerConfig.mcpServers, options.global || false);
|
|
16612
17160
|
if (mcpResult.added.length > 0) {
|
|
16613
17161
|
const location = options.global ? "~/.claude/settings.json" : ".mcp.json";
|
|
16614
17162
|
console.log(` \u2713 Added MCP servers to ${location}: ${mcpResult.added.join(", ")}`);
|
|
@@ -17530,11 +18078,15 @@ async function collectPackageFiles(packageDir, baseDir, packageName) {
|
|
|
17530
18078
|
}
|
|
17531
18079
|
function buildRootManifestFiles() {
|
|
17532
18080
|
const files = [];
|
|
18081
|
+
const seenFiles = /* @__PURE__ */ new Set();
|
|
17533
18082
|
const registry = getFormatRegistry();
|
|
17534
18083
|
for (const [formatName, formatConfig] of Object.entries(registry.formats)) {
|
|
17535
18084
|
if (formatConfig.rootFiles) {
|
|
17536
18085
|
for (const rootFile of formatConfig.rootFiles) {
|
|
17537
|
-
|
|
18086
|
+
if (!seenFiles.has(rootFile)) {
|
|
18087
|
+
seenFiles.add(rootFile);
|
|
18088
|
+
files.push({ file: rootFile, format: formatName });
|
|
18089
|
+
}
|
|
17538
18090
|
}
|
|
17539
18091
|
}
|
|
17540
18092
|
}
|
|
@@ -19813,6 +20365,7 @@ function getPackageIcon(format, subtype) {
|
|
|
19813
20365
|
"replit": "\u{1F52E}",
|
|
19814
20366
|
"zed": "\u26A1",
|
|
19815
20367
|
"codex": "\u{1F9E0}",
|
|
20368
|
+
"amp": "\u26A1",
|
|
19816
20369
|
"mcp": "\u{1F517}",
|
|
19817
20370
|
"agents.md": "\u{1F4DD}",
|
|
19818
20371
|
"ruler": "\u{1F4CF}",
|
|
@@ -19840,6 +20393,7 @@ function getPackageLabel(format, subtype) {
|
|
|
19840
20393
|
"replit": "Replit",
|
|
19841
20394
|
"zed": "Zed",
|
|
19842
20395
|
"codex": "Codex",
|
|
20396
|
+
"amp": "Amp",
|
|
19843
20397
|
"mcp": "MCP",
|
|
19844
20398
|
"agents.md": "Agents.md",
|
|
19845
20399
|
"ruler": "Ruler",
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://registry.prpm.dev/api/v1/schemas/amp/command.json",
|
|
4
|
+
"$comment": "https://ampcode.com/manual#custom-commands",
|
|
5
|
+
"title": "Amp Custom Command Format",
|
|
6
|
+
"description": "JSON Schema for Amp Custom Commands - markdown files or executables that extend prompt input",
|
|
7
|
+
"type": "object",
|
|
8
|
+
"required": ["content"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"frontmatter": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"description": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"maxLength": 1024,
|
|
16
|
+
"description": "Brief description of what this command does"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
},
|
|
21
|
+
"content": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Markdown content appended to the prompt when command is invoked"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"examples": [
|
|
27
|
+
{
|
|
28
|
+
"content": "# Deploy Command\n\nDeploy the application to production:\n\n1. Run tests\n2. Build the application\n3. Deploy to production server\n4. Verify deployment health"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"frontmatter": {
|
|
32
|
+
"description": "Generate a comprehensive test suite"
|
|
33
|
+
},
|
|
34
|
+
"content": "# Generate Tests\n\nCreate comprehensive tests for the specified code:\n\n- Unit tests for all functions\n- Integration tests for API endpoints\n- Edge case coverage"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://registry.prpm.dev/api/v1/schemas/amp.json",
|
|
4
|
+
"$comment": "https://ampcode.com/manual#agents-md",
|
|
5
|
+
"title": "Amp AGENTS.md Format",
|
|
6
|
+
"description": "JSON Schema for Amp agent files - plain markdown with optional YAML frontmatter for glob patterns",
|
|
7
|
+
"type": "object",
|
|
8
|
+
"required": ["content"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"frontmatter": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"globs": {
|
|
14
|
+
"oneOf": [
|
|
15
|
+
{
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Single glob pattern for file matching"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": {
|
|
22
|
+
"type": "string"
|
|
23
|
+
},
|
|
24
|
+
"description": "Array of glob patterns for file matching"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"description": "Glob patterns - file is only included when matching file types are accessed"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"additionalProperties": false
|
|
31
|
+
},
|
|
32
|
+
"content": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"description": "Plain markdown content with project-specific instructions. Supports @-mentions for including other files (e.g., @doc/*.md)"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"examples": [
|
|
38
|
+
{
|
|
39
|
+
"content": "# Backend Guidelines\n\n## Architecture\n\nWe use a clean architecture pattern with dependency injection.\n\n## Database\n\nPostgreSQL with Prisma ORM.\n\n## Coding Standards\n\n- Use TypeScript strict mode\n- Write unit tests for all services\n- Follow @docs/api-conventions.md"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"frontmatter": {
|
|
43
|
+
"globs": ["**/*.ts", "**/*.tsx"]
|
|
44
|
+
},
|
|
45
|
+
"content": "# TypeScript Guidelines\n\nThese rules apply only to TypeScript files:\n\n- Use strict null checks\n- Prefer interfaces over type aliases\n- Export types explicitly"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prpm",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.24",
|
|
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": "^2.1.
|
|
49
|
-
"@pr-pm/registry-client": "^2.3.
|
|
50
|
-
"@pr-pm/types": "^2.1.
|
|
48
|
+
"@pr-pm/converters": "^2.1.25",
|
|
49
|
+
"@pr-pm/registry-client": "^2.3.24",
|
|
50
|
+
"@pr-pm/types": "^2.1.25",
|
|
51
51
|
"ajv": "^8.17.1",
|
|
52
52
|
"ajv-formats": "^3.0.1",
|
|
53
53
|
"chalk": "^5.6.2",
|