feat(agent): add site tools support for canvas project listing and media generation

This commit is contained in:
HouYunFei
2026-07-09 16:53:09 +08:00
parent 7b347729ec
commit 2adbe9e43a
11 changed files with 404 additions and 3 deletions
+20
View File
@@ -17,6 +17,7 @@ import { formatBytes, formatDuration, getDataUrlByteSize, readImageMeta } from "
import { requestEdit, requestGeneration } from "@/services/api/image";
import { deleteStoredImages, resolveImageUrl, uploadImage } from "@/services/image-storage";
import { useAssetStore } from "@/stores/use-asset-store";
import { useWorkbenchAgentStore } from "@/stores/use-workbench-agent-store";
import type { ReferenceImage } from "@/types/image";
type GeneratedImage = {
@@ -88,6 +89,10 @@ export default function ImagePage() {
const [selectedLogIds, setSelectedLogIds] = useState<string[]>([]);
const [previewLog, setPreviewLog] = useState<GenerationLog | null>(null);
const [deleteConfirmOpen, setDeleteConfirmOpen] = useState(false);
const [autoRunToken, setAutoRunToken] = useState(0);
const imageCommand = useWorkbenchAgentStore((state) => state.imageCommand);
const clearImageCommand = useWorkbenchAgentStore((state) => state.clearImageCommand);
const processedCommandRef = useRef(0);
const model = effectiveConfig.imageModel || effectiveConfig.model;
const canGenerate = Boolean(prompt.trim());
@@ -191,6 +196,21 @@ export default function ImagePage() {
}
};
// 响应 Agent 面板下发的生图命令:填入提示词,并按需自动触发生成。
useEffect(() => {
if (!imageCommand || imageCommand.nonce === processedCommandRef.current) return;
processedCommandRef.current = imageCommand.nonce;
clearImageCommand();
if (typeof imageCommand.prompt === "string") setPrompt(imageCommand.prompt);
if (imageCommand.run && !running) setAutoRunToken((value) => value + 1);
}, [imageCommand, clearImageCommand, running]);
useEffect(() => {
if (!autoRunToken) return;
void generate();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [autoRunToken]);
const downloadImage = (image: GeneratedImage, index: number) => {
saveAs(image.dataUrl, `image-${index + 1}.png`);
};