From 619978f91b01ffc9854f43b97e0e267ad0e9706c Mon Sep 17 00:00:00 2001 From: abhi-0203 Date: Wed, 8 Jul 2026 04:42:43 +0000 Subject: [PATCH] fix: preserve Prose Guardian settings-based rules in merged rewrite prompt When multiple rewrite agents are merged, the buildMergedRewritePrompt function now includes Prose Guardian's settings-based rules (banned, avoid, prefer) in the merged prompt. Previously, only promptTemplate was included, which is empty by design for Prose Guardian. This ensures Prose Guardian continues to enforce its rules when merged with other rewrite agents like Continuity Checker or Immersive HTML. Closes #3352 --- .../generation/prose-guardian-settings.ts | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/server/src/services/generation/prose-guardian-settings.ts b/packages/server/src/services/generation/prose-guardian-settings.ts index 161a1dac4b..d1a8be680f 100644 --- a/packages/server/src/services/generation/prose-guardian-settings.ts +++ b/packages/server/src/services/generation/prose-guardian-settings.ts @@ -135,7 +135,40 @@ function getRewritePromptLabel(agentType: string): string { function buildMergedRewritePrompt(agents: ResolvedAgent[]): string { const agentBlocks = agents.flatMap((agent) => { const label = getRewritePromptLabel(agent.type); - return [`<${label}>`, `Agent: ${agent.name}`, agent.promptTemplate, ``, ``]; + const parts = [`<${label}>`, `Agent: ${agent.name}`]; + + // Include promptTemplate if non-empty + if (agent.promptTemplate) { + parts.push(agent.promptTemplate); + } + + // For prose-guardian, include settings-based rules (banned, avoid, prefer) + if (agent.type === "prose-guardian") { + const settings = agent.settings as Record; + const rules: string[] = []; + + const banned = typeof settings.banned === "string" ? settings.banned : null; + if (banned) { + rules.push(`BANNED WORDS/PHRASES: ${banned}`); + } + + const avoid = typeof settings.avoid === "string" ? settings.avoid : null; + if (avoid) { + rules.push(`AVOID: ${avoid}`); + } + + const prefer = typeof settings.prefer === "string" ? settings.prefer : null; + if (prefer) { + rules.push(`PREFER: ${prefer}`); + } + + if (rules.length > 0) { + parts.push(rules.join("\n")); + } + } + + parts.push(``, ``); + return parts; }); return [