import type { ContentPart } from "sandbox-agent";
import { formatJson } from "../../utils/format";
const renderContentPart = (part: ContentPart, index: number) => {
const partType = (part as { type?: string }).type ?? "unknown";
const key = `${partType}-${index}`;
switch (partType) {
case "text":
return (
{(part as { text: string }).text}
);
case "json":
return (
json
{formatJson((part as { json: unknown }).json)}
);
case "tool_call": {
const { name, arguments: args, call_id } = part as {
name: string;
arguments: string;
call_id: string;
};
return (
tool call - {name}
{call_id ? ` - ${call_id}` : ""}
{args ?
{args} :
No arguments
}
);
}
case "tool_result": {
const { call_id, output } = part as { call_id: string; output: string };
return (
tool result - {call_id}
{output ?
{output} :
No output
}
);
}
case "file_ref": {
const { path, action, diff } = part as { path: string; action: string; diff?: string | null };
return (
file - {action}
{path}
{diff &&
{diff}}
);
}
case "reasoning": {
const { text, visibility } = part as { text: string; visibility: string };
return (
reasoning - {visibility}
{text}
);
}
case "image": {
const { path, mime } = part as { path: string; mime?: string | null };
return (
image {mime ? `- ${mime}` : ""}
{path}
);
}
case "status": {
const { label, detail } = part as { label: string; detail?: string | null };
return (
status - {label}
{detail &&
{detail}
}
);
}
default:
return (
unknown
{formatJson(part)}
);
}
};
export default renderContentPart;