fix: display proper persona names in custom agent manifests
## Problem Custom agents showed generic names (like "Commit Poet") instead of their actual persona names (like "Inkwell Von Comitizen") in the agent manifest. ## Root Cause The extractManifestData function was using metadata.name/title instead of extracting the persona name from the compiled agent XML. ## Solution 1. Added extractAgentAttribute function to pull attributes from <agent> tag 2. Prioritize XML extraction over metadata for persona info: - displayName: uses agent title attribute from XML - title: uses agent title attribute from XML - icon: uses agent icon attribute from XML - Falls back to metadata if XML extraction fails ## Result Custom agents now display their actual persona names in manifests: - Before: "Commit Poet" - After: "Inkwell Von Comitizen" This provides better user experience with proper agent identification in IDE integrations and manifests.
This commit is contained in:
parent
efc2b6d0df
commit
6907d44810
|
|
@ -2371,7 +2371,6 @@ class Installer {
|
||||||
if (await fs.pathExists(manifestFile)) {
|
if (await fs.pathExists(manifestFile)) {
|
||||||
const manifestData = extractManifestData(xml, { ...metadata, name: finalAgentName }, relativePath, 'custom');
|
const manifestData = extractManifestData(xml, { ...metadata, name: finalAgentName }, relativePath, 'custom');
|
||||||
manifestData.name = finalAgentName;
|
manifestData.name = finalAgentName;
|
||||||
manifestData.displayName = metadata.name || finalAgentName;
|
|
||||||
manifestData.path = relativePath;
|
manifestData.path = relativePath;
|
||||||
addToManifest(manifestFile, manifestData);
|
addToManifest(manifestFile, manifestData);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -677,6 +677,12 @@ function extractManifestData(xmlContent, metadata, agentPath, moduleName = 'cust
|
||||||
return match[1].trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ').trim();
|
return match[1].trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ').trim();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Extract attributes from agent tag
|
||||||
|
const extractAgentAttribute = (attr) => {
|
||||||
|
const match = xmlContent.match(new RegExp(`<agent[^>]*\\s${attr}=["']([^"']+)["']`));
|
||||||
|
return match ? match[1] : '';
|
||||||
|
};
|
||||||
|
|
||||||
const extractPrinciples = () => {
|
const extractPrinciples = () => {
|
||||||
const match = xmlContent.match(/<principles>([\s\S]*?)<\/principles>/);
|
const match = xmlContent.match(/<principles>([\s\S]*?)<\/principles>/);
|
||||||
if (!match) return '';
|
if (!match) return '';
|
||||||
|
|
@ -689,11 +695,15 @@ function extractManifestData(xmlContent, metadata, agentPath, moduleName = 'cust
|
||||||
return principles;
|
return principles;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Prioritize XML extraction over metadata for agent persona info
|
||||||
|
const xmlTitle = extractAgentAttribute('title') || extractTag('name');
|
||||||
|
const xmlIcon = extractAgentAttribute('icon');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: metadata.id ? path.basename(metadata.id, '.md') : metadata.name.toLowerCase().replaceAll(/\s+/g, '-'),
|
name: metadata.id ? path.basename(metadata.id, '.md') : metadata.name.toLowerCase().replaceAll(/\s+/g, '-'),
|
||||||
displayName: metadata.name || '',
|
displayName: xmlTitle || metadata.name || '',
|
||||||
title: metadata.title || '',
|
title: xmlTitle || metadata.title || '',
|
||||||
icon: metadata.icon || '',
|
icon: xmlIcon || metadata.icon || '',
|
||||||
role: extractTag('role'),
|
role: extractTag('role'),
|
||||||
identity: extractTag('identity'),
|
identity: extractTag('identity'),
|
||||||
communicationStyle: extractTag('communication_style'),
|
communicationStyle: extractTag('communication_style'),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue