MCPcopy Create free account
hub / github.com/CodeClash-ai/CodeClash / createMessageElement

Function createMessageElement

codeclash/viewer/static/js/trajectory.js:119–175  ·  view source on GitHub ↗
(message, index)

Source from the content-addressed store, hash-verified

117}
118
119function createMessageElement(message, index) {
120 const messageBlock = document.createElement("div");
121 messageBlock.className = `message-block ${message.role}`;
122
123 const roleBadge = document.createElement("span");
124 roleBadge.className = "message-role-badge";
125 roleBadge.textContent =
126 message.role.charAt(0).toUpperCase() + message.role.slice(1) + " #" + index;
127
128 const messageContent = document.createElement("div");
129 messageContent.className = "message-content";
130
131 // Handle different content types.
132 // mini-swe-agent v2 (tool-call) assistant messages keep the command in
133 // extra.actions / tool_calls instead of in a ```bash block in the text, so they need
134 // their own renderer. v1 messages have neither and fall through to the text paths below.
135 const toolActions =
136 message.extra && Array.isArray(message.extra.actions)
137 ? message.extra.actions
138 : [];
139 const hasToolCalls =
140 Array.isArray(message.tool_calls) && message.tool_calls.length > 0;
141 if (toolActions.length > 0 || hasToolCalls) {
142 messageContent.innerHTML = createToolCallContentHTML(message);
143 } else if (typeof message.content === "string") {
144 const lines = message.content.split("\n");
145 if (lines.length <= 5) {
146 // Show full content
147 messageContent.innerHTML = createFullContentHTML(
148 message.content,
149 message.role,
150 );
151 } else {
152 // Show preview with expand
153 messageContent.innerHTML = createPreviewContentHTML(
154 message.content,
155 lines,
156 message.role,
157 );
158 }
159 } else if (Array.isArray(message.content)) {
160 // Handle complex content (e.g., user messages with multiple parts)
161 messageContent.innerHTML = createComplexContentHTML(message.content);
162 } else {
163 // Fallback
164 messageContent.innerHTML = `<div class="message-content-full"><div class="message-text"><pre>${JSON.stringify(
165 message.content,
166 null,
167 2,
168 )}</pre></div></div>`;
169 }
170
171 messageBlock.appendChild(roleBadge);
172 messageBlock.appendChild(messageContent);
173
174 return messageBlock;
175}
176

Callers 1

renderMessagesFunction · 0.85

Calls 4

createFullContentHTMLFunction · 0.85
createPreviewContentHTMLFunction · 0.85
createComplexContentHTMLFunction · 0.85

Tested by

no test coverage detected