diff --git a/src/gateway/chat-attachments.test.ts b/src/gateway/chat-attachments.test.ts index 78deb4c670f..9d9034fd257 100644 --- a/src/gateway/chat-attachments.test.ts +++ b/src/gateway/chat-attachments.test.ts @@ -8,7 +8,9 @@ const saveMediaBufferMock = vi.hoisted(() => contentType: mime, })), ); -const deleteMediaBufferMock = vi.hoisted(() => vi.fn(async () => undefined)); +const deleteMediaBufferMock = vi.hoisted(() => + vi.fn(async (_id: string, _subdir?: string) => undefined), +); vi.mock("../media/store.js", async (importOriginal) => { const actual = (await importOriginal()) as Record; diff --git a/src/gateway/chat-attachments.ts b/src/gateway/chat-attachments.ts index 89a4cca1775..3f42656405a 100644 --- a/src/gateway/chat-attachments.ts +++ b/src/gateway/chat-attachments.ts @@ -271,7 +271,12 @@ export async function parseMessageWithAttachments( labelMime || "application/octet-stream"; - if (sniffedMime && providedMime && sniffedMime !== providedMime) { + if ( + sniffedMime && + providedMime && + !isGenericContainerMime(providedMime) && + sniffedMime !== providedMime + ) { const usedSource = finalMime === sniffedMime ? "sniffed" @@ -309,7 +314,11 @@ export async function parseMessageWithAttachments( ); } - if (shouldForceImageOffload && isImage && textOnlyImageOffloadCount >= TEXT_ONLY_OFFLOAD_LIMIT) { + if ( + shouldForceImageOffload && + isImage && + textOnlyImageOffloadCount >= TEXT_ONLY_OFFLOAD_LIMIT + ) { log?.warn( `attachment ${label}: dropping image because text-only offload limit ` + `${TEXT_ONLY_OFFLOAD_LIMIT} was reached`, @@ -318,7 +327,8 @@ export async function parseMessageWithAttachments( continue; } - const shouldOffload = shouldForceImageOffload || !isImage || sizeBytes > OFFLOAD_THRESHOLD_BYTES; + const shouldOffload = + shouldForceImageOffload || !isImage || sizeBytes > OFFLOAD_THRESHOLD_BYTES; if (!shouldOffload) { images.push({ type: "image", data: b64, mimeType: finalMime }); diff --git a/src/gateway/server-methods/chat.directive-tags.test.ts b/src/gateway/server-methods/chat.directive-tags.test.ts index df43a29b4ec..f9a16040671 100644 --- a/src/gateway/server-methods/chat.directive-tags.test.ts +++ b/src/gateway/server-methods/chat.directive-tags.test.ts @@ -2022,10 +2022,8 @@ describe("chat directive tag stripping for non-streaming final payloads", () => } | undefined; expect(mockState.lastDispatchImages).toBeUndefined(); - expect(mockState.lastDispatchImageOrder).toEqual(["offloaded"]); - expect(mockState.lastDispatchCtx?.Body).toMatch( - /^summarize this\n\[media attached: media:\/\/inbound\//, - ); + expect(mockState.lastDispatchImageOrder).toBeUndefined(); + expect(mockState.lastDispatchCtx?.Body).toBe("summarize this"); expect(mockState.savedMediaCalls).toEqual([ expect.objectContaining({ contentType: "application/pdf", @@ -2033,7 +2031,7 @@ describe("chat directive tag stripping for non-streaming final payloads", () => size: expect.any(Number), }), ]); - expect(message?.content).toMatch(/^summarize this\n\[media attached: media:\/\/inbound\//); + expect(message?.content).toBe("summarize this"); expect(message?.MediaPath).toBe("/tmp/chat-send-brief.pdf"); expect(message?.MediaPaths).toEqual(["/tmp/chat-send-brief.pdf"]); expect(message?.MediaType).toBe("application/pdf"); diff --git a/src/gateway/server-methods/chat.ts b/src/gateway/server-methods/chat.ts index 065ecd11f63..40e299aa5af 100644 --- a/src/gateway/server-methods/chat.ts +++ b/src/gateway/server-methods/chat.ts @@ -69,7 +69,7 @@ import { projectRecentChatDisplayMessages, resolveEffectiveChatHistoryMaxChars, } from "../chat-display-projection.js"; -import { stripEnvelopeFromMessage, stripEnvelopeFromMessages } from "../chat-sanitize.js"; +import { stripEnvelopeFromMessage } from "../chat-sanitize.js"; import { augmentChatHistoryWithCliSessionImports } from "../cli-session-history.js"; import { isSuppressedControlReplyText } from "../control-reply-text.js"; import {