fix: show tool result images outside event groups

This commit is contained in:
Phát kana
2026-07-13 22:48:28 +07:00
parent c217c4a417
commit f181c47191
3 changed files with 34 additions and 1 deletions
@@ -0,0 +1,5 @@
---
"@jmfederico/pi-web": patch
---
Keep image content from tool results visible outside collapsed event groups while retaining technical tool metadata inside the group.
+28
View File
@@ -41,6 +41,34 @@ describe("groupChatMessages", () => {
]);
});
it("keeps image content visible outside collapsed event groups", () => {
const image = { type: "image" as const, mimeType: "image/png", data: "QUJD" };
const messages: ChatLine[] = [
{ role: "tool", parts: [{ type: "toolResult", toolName: "read", text: "Read image file [image/png]", isError: false }, image] },
];
expect(groupChatMessages(messages)).toEqual([
{
kind: "group",
startIndex: 0,
endIndex: 0,
messages: [{ role: "tool", parts: [{ type: "toolResult", toolName: "read", text: "Read image file [image/png]", isError: false }] }],
},
{ kind: "message", index: 0, message: { role: "tool", parts: [image] } },
]);
});
it("preserves image metadata when splitting technical and readable parts", () => {
const meta = { timestamp: "2026-07-13T22:00:00.000Z" };
const image = { type: "image" as const, mimeType: "image/webp", data: "QUJD" };
const message: ChatLine = { role: "tool", parts: [{ type: "toolResult", toolName: "read", text: "ok", isError: false }, image], meta };
expect(groupChatMessages([message])).toEqual([
{ kind: "group", startIndex: 0, endIndex: 0, messages: [{ role: "tool", parts: [message.parts[0]], meta }] },
{ kind: "message", index: 0, message: { role: "tool", parts: [image], meta } },
]);
});
it("preserves message metadata when grouping", () => {
const message: ChatLine = { role: "assistant", parts: [{ type: "thinking", text: "hidden" }, { type: "text", text: "shown" }], meta: { timestamp: "2026-05-09T12:00:00.000Z", model: { provider: "test", id: "model" } } };
+1 -1
View File
@@ -49,6 +49,6 @@ export function summarizeChatGroup(messages: ChatLine[]): string {
function isReadablePart(message: ChatLine, part: ChatPart): boolean {
if (message.source === "compaction" || message.source === "branch_summary") return false;
if (part.type === "skillInvocation" || part.type === "skillRead") return true;
if (part.type === "skillInvocation" || part.type === "skillRead" || part.type === "image") return true;
return part.type === "text" && (message.role === "user" || message.role === "assistant" || message.role === "system" || message.role === "bash");
}