- {toolCall.images.map((image, index) => (
-
- onRightClickMenu(event, {
- kind: 'generated_media',
- mediaType: 'image',
- mediaSrc: image.imageSrc,
- objectKey: image.objectKey,
- suggestedFileName: `Agent生成图片-${index + 1}`,
- })
- : undefined
- }
- >
-
-
- ))}
+ {toolCall.images.map((image, index) => {
+ const resourceId = image.resourceId?.trim() || null;
+ return (
+
+ onRightClickMenu(event, {
+ kind: 'generated_media',
+ mediaType: 'image',
+ mediaSrc: image.imageSrc,
+ objectKey: image.objectKey,
+ resourceId,
+ suggestedFileName: `Agent生成图片-${index + 1}`,
+ })
+ : undefined
+ }
+ >
+
+
+ );
+ })}
) : null}
{videos.length ? (
- {videos.map((video, index) => (
-
- onRightClickMenu(event, {
- kind: 'generated_media',
- mediaType: 'video',
- mediaSrc: video.videoSrc,
- objectKey: video.objectKey,
- suggestedFileName: `Agent生成视频-${index + 1}`,
- })
- : undefined
- }
- >
-
{
+ const resourceId = video.resourceId?.trim() || null;
+ return (
+
+ onRightClickMenu(event, {
+ kind: 'generated_media',
+ mediaType: 'video',
+ mediaSrc: video.videoSrc,
+ objectKey: video.objectKey,
+ resourceId,
+ suggestedFileName: `Agent生成视频-${index + 1}`,
+ })
+ : undefined
}
- poster={video.thumbnailSrc ?? undefined}
- controls
- playsInline
- preload="metadata"
- className="max-h-56 w-full bg-black object-contain"
- />
-
- ))}
+ >
+
+
+ );
+ })}
) : null}
{audios.length ? (
- {audios.map((audio, index) => (
-
- onRightClickMenu(event, {
- kind: 'generated_media',
- mediaType: 'audio',
- mediaSrc: audio.audioSrc,
- objectKey: audio.objectKey,
- suggestedFileName: `Agent生成音频-${index + 1}`,
- })
- : undefined
- }
- >
-
-
{
+ const resourceId = audio.resourceId?.trim() || null;
+ return (
+
+ onRightClickMenu(event, {
+ kind: 'generated_media',
+ mediaType: 'audio',
+ mediaSrc: audio.audioSrc,
+ objectKey: audio.objectKey,
+ resourceId,
+ suggestedFileName: `Agent生成音频-${index + 1}`,
+ })
+ : undefined
}
- controls
- preload="metadata"
- className="min-w-0 flex-1"
- />
-
- ))}
+ >
+
+
+
+ );
+ })}
) : null}
diff --git a/src/components/image-editor/EditorAgentConversation/common.ts b/src/components/image-editor/EditorAgentConversation/common.ts
index fbcf716ce..071a51094 100644
--- a/src/components/image-editor/EditorAgentConversation/common.ts
+++ b/src/components/image-editor/EditorAgentConversation/common.ts
@@ -6,6 +6,7 @@ export enum EditorAgentRightClickAction {
CopyText = 'copy_text',
CopyImage = 'copy_image',
ReferenceImage = 'reference_image',
+ FocusCanvas = 'focus_canvas',
DownloadAsset = 'download_asset',
}
@@ -20,6 +21,7 @@ export type EditorAgentContextAsset =
mediaType: 'image' | 'video' | 'audio';
mediaSrc: string;
objectKey?: string | null;
+ resourceId?: string | null;
suggestedFileName: string;
};
diff --git a/src/components/image-editor/EditorAgentConversation/useEditorAgentConversation.test.tsx b/src/components/image-editor/EditorAgentConversation/useEditorAgentConversation.test.tsx
index 3f1aa8c3e..8a57e803a 100644
--- a/src/components/image-editor/EditorAgentConversation/useEditorAgentConversation.test.tsx
+++ b/src/components/image-editor/EditorAgentConversation/useEditorAgentConversation.test.tsx
@@ -23,6 +23,7 @@ import {
useEditorAgentConversation,
} from './useEditorAgentConversation.ts';
+const focusResourceMock = vi.fn();
const refreshCanvasMock = vi.fn();
function ImageCanvasActionsTestWrapper({
@@ -31,7 +32,10 @@ function ImageCanvasActionsTestWrapper({
children: ReactNode;
}) {
return (
-