fix: preserve inline image routing with staged media · openclaw/openclaw@9263e38
shakkernerd
·
2026-05-27
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -203,6 +203,7 @@ vi.mock("../../auto-reply/dispatch.js", () => ({
|
203 | 203 | onAgentRunStart?: (runId: string) => void; |
204 | 204 | userTurnTranscriptRecorder?: { |
205 | 205 | message?: unknown; |
| 206 | +resolveMessage?: () => Promise<unknown>; |
206 | 207 | markRuntimePersisted: (message: { role: "user"; content: string }) => void; |
207 | 208 | markRuntimePersistencePending: (pending: Promise<void>) => void; |
208 | 209 | }; |
@@ -213,8 +214,10 @@ vi.mock("../../auto-reply/dispatch.js", () => ({
|
213 | 214 | mockState.lastDispatchCtx = params.ctx; |
214 | 215 | mockState.lastDispatchImages = params.replyOptions?.images; |
215 | 216 | mockState.lastDispatchImageOrder = params.replyOptions?.imageOrder; |
216 | | -mockState.lastDispatchUserTurnInput = |
217 | | -params.replyOptions?.userTurnTranscriptRecorder?.message; |
| 217 | +const recorder = params.replyOptions?.userTurnTranscriptRecorder; |
| 218 | +mockState.lastDispatchUserTurnInput = recorder?.resolveMessage |
| 219 | + ? await recorder.resolveMessage() |
| 220 | + : recorder?.message; |
218 | 221 | if (mockState.dispatchError) { |
219 | 222 | throw mockState.dispatchError; |
220 | 223 | } |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -2690,6 +2690,14 @@ export const chatHandlers: GatewayRequestHandlers = {
|
2690 | 2690 | ctx.MediaWorkspaceDir = mediaPathOffloadWorkspaceDir; |
2691 | 2691 | ctx.MediaStaged = true; |
2692 | 2692 | } |
| 2693 | +const mediaPathOffloadsIncludeImages = mediaPathOffloadTypes.some((type) => |
| 2694 | +type.startsWith("image/"), |
| 2695 | +); |
| 2696 | +const replyOptionImages = mediaPathOffloadsIncludeImages |
| 2697 | + ? undefined |
| 2698 | + : parsedImages.length > 0 |
| 2699 | + ? parsedImages |
| 2700 | + : undefined; |
2693 | 2701 | |
2694 | 2702 | const { onModelSelected, ...replyPipeline } = createChannelMessageReplyPipeline({ |
2695 | 2703 | cfg, |
@@ -2875,7 +2883,7 @@ export const chatHandlers: GatewayRequestHandlers = {
|
2875 | 2883 | replyOptions: { |
2876 | 2884 | runId: clientRunId, |
2877 | 2885 | abortSignal: activeRunAbort.controller.signal, |
2878 | | -images: parsedImages.length > 0 ? parsedImages : undefined, |
| 2886 | +images: replyOptionImages, |
2879 | 2887 | imageOrder: imageOrder.length > 0 ? imageOrder : undefined, |
2880 | 2888 | thinkingLevelOverride: p.thinking, |
2881 | 2889 | fastModeOverride: p.fastMode, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -503,6 +503,7 @@ describe("gateway server chat", () => {
|
503 | 503 | expect(captured?.ctx?.MediaType).toBe("image/png"); |
504 | 504 | expect(captured?.ctx?.MediaTypes).toEqual(["image/png"]); |
505 | 505 | expect(captured?.ctx?.MediaStaged).toBe(true); |
| 506 | +await vi.waitFor(() => expect(context.removeChatRun).toHaveBeenCalledTimes(1)); |
506 | 507 | } finally { |
507 | 508 | dispatchInboundMessageMock.mockReset(); |
508 | 509 | testState.agentConfig = undefined; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。