diff --git a/tools/cli/lib/agent-party-generator.js b/tools/cli/lib/agent-party-generator.js
index 03995c3f..b049bb33 100644
--- a/tools/cli/lib/agent-party-generator.js
+++ b/tools/cli/lib/agent-party-generator.js
@@ -50,7 +50,7 @@ const AgentPartyGenerator = {
${this.escapeXml(agent.role || '')}
${this.escapeXml(agent.identity || '')}
${this.escapeXml(agent.communicationStyle || '')}
- ${agent.principles || ''}
+ ${this.escapeXml(agent.principles || '')}
\n`;
}
diff --git a/tools/cli/lib/yaml-xml-builder.js b/tools/cli/lib/yaml-xml-builder.js
index 8b7c36fa..4ddc5c2e 100644
--- a/tools/cli/lib/yaml-xml-builder.js
+++ b/tools/cli/lib/yaml-xml-builder.js
@@ -234,13 +234,31 @@ class YamlXmlBuilder {
}
if (persona.principles) {
- // Principles can be array or string
- let principlesText;
+ // Principles can be array, object, or string
+ 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)) {
- principlesText = persona.principles.join(' ');
+ principlesText = persona.principles.map(stringifyEntry).filter(Boolean).join(' ');
+ } else if (typeof persona.principles === 'object') {
+ principlesText = stringifyEntry(persona.principles);
} else {
- principlesText = persona.principles;
+ principlesText = String(persona.principles);
}
+
xml += ` ${this.escapeXml(principlesText)}\n`;
}