From a70dae40b7c5ddeab47aab1ebd2c09372aebecb4 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 23 Jun 2026 07:49:58 +0800 Subject: [PATCH] refactor(media): share duplicate guard action results --- .../tools/image-generate-tool.actions.ts | 23 ++++--------- .../media-generate-tool-actions-shared.ts | 34 +++++++++++++++++++ .../tools/music-generate-tool.actions.ts | 23 ++++--------- .../tools/video-generate-tool.actions.ts | 23 ++++--------- 4 files changed, 52 insertions(+), 51 deletions(-) diff --git a/src/agents/tools/image-generate-tool.actions.ts b/src/agents/tools/image-generate-tool.actions.ts index 775168a1962..cba84dac16f 100644 --- a/src/agents/tools/image-generate-tool.actions.ts +++ b/src/agents/tools/image-generate-tool.actions.ts @@ -17,6 +17,7 @@ import { listActiveImageGenerationTasksForSession, } from "../image-generation-task-status.js"; import { + createMediaGenerateDuplicateGuardResult, createMediaGenerateProviderListActionResult, createMediaGenerateTaskStatusActions, type MediaGenerateActionResult, @@ -121,24 +122,12 @@ export function createImageGenerateDuplicateGuardResult( sessionKey?: string, params?: { prompt?: string; requestKey?: string }, ): ImageGenerateActionResult | undefined { - const blockingTask = findDuplicateGuardImageGenerationTaskForSession(sessionKey, { + return createMediaGenerateDuplicateGuardResult({ + sessionKey, prompt: params?.prompt, requestKey: params?.requestKey, + findDuplicateTask: findDuplicateGuardImageGenerationTaskForSession, + buildStatusText: buildImageGenerationTaskStatusText, + buildStatusDetails: buildImageGenerationTaskStatusDetails, }); - if (!blockingTask) { - return undefined; - } - return { - content: [ - { - type: "text", - text: buildImageGenerationTaskStatusText(blockingTask, { duplicateGuard: true }), - }, - ], - details: { - action: "status", - duplicateGuard: true, - ...buildImageGenerationTaskStatusDetails(blockingTask), - }, - }; } diff --git a/src/agents/tools/media-generate-tool-actions-shared.ts b/src/agents/tools/media-generate-tool-actions-shared.ts index b96da7b1754..429a9ad5cc4 100644 --- a/src/agents/tools/media-generate-tool-actions-shared.ts +++ b/src/agents/tools/media-generate-tool-actions-shared.ts @@ -143,6 +143,40 @@ export function createMediaGenerateTaskStatusActions(params: { }; } +/** Builds duplicate-guard status output for a media generation task type. */ +export function createMediaGenerateDuplicateGuardResult(params: { + sessionKey?: string; + prompt?: string; + requestKey?: string; + findDuplicateTask: ( + sessionKey?: string, + params?: { prompt?: string; requestKey?: string }, + ) => Task | undefined; + buildStatusText: TaskStatusTextBuilder; + buildStatusDetails: (task: Task) => Record; +}): MediaGenerateActionResult | undefined { + const blockingTask = params.findDuplicateTask(params.sessionKey, { + prompt: params.prompt, + requestKey: params.requestKey, + }); + if (!blockingTask) { + return undefined; + } + return { + content: [ + { + type: "text", + text: params.buildStatusText(blockingTask, { duplicateGuard: true }), + }, + ], + details: { + action: "status", + duplicateGuard: true, + ...params.buildStatusDetails(blockingTask), + }, + }; +} + function createMediaGenerateStatusActionResult(params: { sessionKey?: string; inactiveText: string; diff --git a/src/agents/tools/music-generate-tool.actions.ts b/src/agents/tools/music-generate-tool.actions.ts index 4142974a350..346bf19d32e 100644 --- a/src/agents/tools/music-generate-tool.actions.ts +++ b/src/agents/tools/music-generate-tool.actions.ts @@ -14,6 +14,7 @@ import { findDuplicateGuardMusicGenerationTaskForSession, } from "../music-generation-task-status.js"; import { + createMediaGenerateDuplicateGuardResult, createMediaGenerateProviderListActionResult, createMediaGenerateTaskStatusActions, type MediaGenerateActionResult, @@ -100,24 +101,12 @@ export function createMusicGenerateDuplicateGuardResult( sessionKey?: string, params?: { prompt?: string; requestKey?: string }, ): MusicGenerateActionResult | undefined { - const blockingTask = findDuplicateGuardMusicGenerationTaskForSession(sessionKey, { + return createMediaGenerateDuplicateGuardResult({ + sessionKey, prompt: params?.prompt, requestKey: params?.requestKey, + findDuplicateTask: findDuplicateGuardMusicGenerationTaskForSession, + buildStatusText: buildMusicGenerationTaskStatusText, + buildStatusDetails: buildMusicGenerationTaskStatusDetails, }); - if (!blockingTask) { - return undefined; - } - return { - content: [ - { - type: "text", - text: buildMusicGenerationTaskStatusText(blockingTask, { duplicateGuard: true }), - }, - ], - details: { - action: "status", - duplicateGuard: true, - ...buildMusicGenerationTaskStatusDetails(blockingTask), - }, - }; } diff --git a/src/agents/tools/video-generate-tool.actions.ts b/src/agents/tools/video-generate-tool.actions.ts index 6137eb115fb..765768b24e6 100644 --- a/src/agents/tools/video-generate-tool.actions.ts +++ b/src/agents/tools/video-generate-tool.actions.ts @@ -14,6 +14,7 @@ import { findDuplicateGuardVideoGenerationTaskForSession, } from "../video-generation-task-status.js"; import { + createMediaGenerateDuplicateGuardResult, createMediaGenerateProviderListActionResult, createMediaGenerateTaskStatusActions, type MediaGenerateActionResult, @@ -119,24 +120,12 @@ export function createVideoGenerateDuplicateGuardResult( sessionKey?: string, params?: { prompt?: string; requestKey?: string }, ): VideoGenerateActionResult | undefined { - const blockingTask = findDuplicateGuardVideoGenerationTaskForSession(sessionKey, { + return createMediaGenerateDuplicateGuardResult({ + sessionKey, prompt: params?.prompt, requestKey: params?.requestKey, + findDuplicateTask: findDuplicateGuardVideoGenerationTaskForSession, + buildStatusText: buildVideoGenerationTaskStatusText, + buildStatusDetails: buildVideoGenerationTaskStatusDetails, }); - if (!blockingTask) { - return undefined; - } - return { - content: [ - { - type: "text", - text: buildVideoGenerationTaskStatusText(blockingTask, { duplicateGuard: true }), - }, - ], - details: { - action: "status", - duplicateGuard: true, - ...buildVideoGenerationTaskStatusDetails(blockingTask), - }, - }; }