Fix principles serialization in YAML→XML builder when list items are objects; escape principles in agent-party generator (#713)

This commit is contained in:
Alex Verkhovsky 2025-10-09 15:00:55 -07:00
parent 940cc15751
commit 3aabf94905
2 changed files with 23 additions and 5 deletions

View File

@ -50,7 +50,7 @@ const AgentPartyGenerator = {
<role>${this.escapeXml(agent.role || '')}</role> <role>${this.escapeXml(agent.role || '')}</role>
<identity>${this.escapeXml(agent.identity || '')}</identity> <identity>${this.escapeXml(agent.identity || '')}</identity>
<communication_style>${this.escapeXml(agent.communicationStyle || '')}</communication_style> <communication_style>${this.escapeXml(agent.communicationStyle || '')}</communication_style>
<principles>${agent.principles || ''}</principles> <principles>${this.escapeXml(agent.principles || '')}</principles>
</persona> </persona>
</agent>\n`; </agent>\n`;
} }

View File

@ -234,13 +234,31 @@ class YamlXmlBuilder {
} }
if (persona.principles) { if (persona.principles) {
// Principles can be array or string // Principles can be array, object, or string
let principlesText; let principlesText = '';
const stringifyEntry = (entry) => {
if (entry == null) return '';
if (typeof entry === 'string') return entry;
if (Array.isArray(entry)) return entry.map(stringifyEntry).filter(Boolean).join(' ');
if (typeof entry === 'object') {
const pairs = Object.entries(entry).map(([k, v]) => {
const vStr = Array.isArray(v) ? v.map(String).join(' ') : String(v ?? '');
return `${k}: ${vStr}`;
});
return pairs.join(' ');
}
return String(entry);
};
if (Array.isArray(persona.principles)) { if (Array.isArray(persona.principles)) {
principlesText = persona.principles.join(' '); principlesText = persona.principles.map(stringifyEntry).filter(Boolean).join(' ');
} else if (typeof persona.principles === 'object') {
principlesText = stringifyEntry(persona.principles);
} else { } else {
principlesText = persona.principles; principlesText = String(persona.principles);
} }
xml += ` <principles>${this.escapeXml(principlesText)}</principles>\n`; xml += ` <principles>${this.escapeXml(principlesText)}</principles>\n`;
} }