From e6bc243cf71b3de5573b48f13f6cabe1b75b36cc Mon Sep 17 00:00:00 2001 From: "cristiano.hoshikawa" Date: Fri, 11 Sep 2026 10:45:49 -0300 Subject: [PATCH] new feature: frontend with separated responses --- apps/agent_frontend/app.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/agent_frontend/app.js b/apps/agent_frontend/app.js index f18024a2..e9c2fa42 100644 --- a/apps/agent_frontend/app.js +++ b/apps/agent_frontend/app.js @@ -34,6 +34,15 @@ function stripOwnAgentMarker(value, agent) { const normalize = (name) => String(name || "").replace(/[_\s-]+/g, "").toLowerCase(); return normalize(marker[1]) === normalize(agent) ? text.slice(marker[0].length).trim() : text; } +function orderAgentMessages(agentResponses) { + return [...agentResponses].sort( + (a, b) => Number(Boolean(a.primary)) - Number(Boolean(b.primary)) + ); +} +function sameAgent(left, right) { + const normalize = (name) => String(name || "").replace(/[_\s-]+/g, "").toLowerCase(); + return Boolean(normalize(left)) && normalize(left) === normalize(right); +} function addUserMessage(text) { const div = document.createElement("div"); div.className = "msg user chat-bubble--user"; @@ -68,12 +77,19 @@ function getAgentMessages(data) { const messages = candidates.map((item) => ({ agent: item?.agent || item?.agent_id || item?.agentId || item?.name, text: stripOwnAgentMarker(item?.answer ?? item?.text ?? item?.message ?? item?.response ?? item?.content, item?.agent || item?.agent_id || item?.agentId || item?.name), + primary: item?.primary === true, })).filter((item) => item.agent && responseText(item.text).trim()); - if (messages.length) return messages; + if (messages.length) return orderAgentMessages(messages); } const text = data?.text ?? data?.speak ?? data?.message ?? data?.response ?? data?.content ?? data?.output; const taggedMessages = splitTaggedAgentMessages(text); - if (taggedMessages.length) return taggedMessages; + if (taggedMessages.length) { + const primaryAgent = metadata.active_agent || metadata.route || data?.route || metadata.route_decision?.agent || metadata.route_decision?.route; + return orderAgentMessages(taggedMessages.map((item) => ({ + ...item, + primary: sameAgent(item.agent, primaryAgent), + }))); + } const agent = metadata.active_agent || metadata.route || data?.agent_id || metadata.agent_id || val("agent") || "agent"; return responseText(text).trim() ? [{ agent, text }] : []; }