fix(coding-agent): process BMP images from disk

closes #6047
This commit is contained in:
Armin Ronacher
2026-06-25 12:51:21 +02:00
parent 6ca7ba7c05
commit 4cc339f58d
9 changed files with 329 additions and 67 deletions
@@ -10,6 +10,22 @@ import { createReadTool } from "../src/core/tools/read.ts";
const TINY_PNG_BASE64 =
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
function createTinyBmp1x1Red24bpp(): Buffer {
const buffer = Buffer.alloc(58);
buffer.write("BM", 0, "ascii");
buffer.writeUInt32LE(buffer.length, 2);
buffer.writeUInt32LE(54, 10);
buffer.writeUInt32LE(40, 14);
buffer.writeInt32LE(1, 18);
buffer.writeInt32LE(1, 22);
buffer.writeUInt16LE(1, 26);
buffer.writeUInt16LE(24, 28);
buffer.writeUInt32LE(0, 30);
buffer.writeUInt32LE(4, 34);
buffer[56] = 0xff;
return buffer;
}
describe("blockImages setting", () => {
describe("SettingsManager", () => {
it("should default blockImages to false", () => {
@@ -106,6 +122,18 @@ describe("blockImages setting", () => {
expect(result.images[0].type).toBe("image");
});
it("should process BMP images from disk as PNG attachments", async () => {
const imagePath = join(testDir, "test.bmp");
writeFileSync(imagePath, createTinyBmp1x1Red24bpp());
const result = await processFileArguments([imagePath]);
expect(result.images).toHaveLength(1);
expect(result.images[0].type).toBe("image");
expect(result.images[0].mimeType).toBe("image/png");
expect(result.text).toContain("[Image converted from image/bmp to image/png.]");
});
it("should process text files normally", async () => {
// Create test text file
const textPath = join(testDir, "test.txt");