Files
openclaw/src/agents/image-generation-task-status.ts
Peter Steinberger fd8afc1dce refactor: unify async media generation
Summary:
- Refactor image/music/video generation onto the shared async media-generation scheduler and task lifecycle.
- Make session-backed image generation async with status, duplicate guarding, active-task prompt context, and message-tool completion delivery.
- Update docs/changelog and add /tasks coverage for image-generation task visibility.

Verification:
- Codex review: no accepted/actionable findings.
- pnpm test src/auto-reply/reply/commands-tasks.test.ts src/agents/tools/image-generate-tool.test.ts src/agents/tools/image-generate-background.test.ts src/agents/image-generation-task-status.test.ts -- --reporter=dot
- Previous focused media suite: 12 files / 169 tests passed.
- Crabbox aws check:changed run run_fbd1b62c7472 passed.
- Crabbox aws live openclaw infer run run_c17929e0e224 passed with OpenAI gpt-image-2.
- GitHub CI for rebased head 74d1cda6a6 completed with no non-success code gates.
2026-05-16 22:50:06 +01:00

68 lines
2.1 KiB
TypeScript

import type { TaskRecord } from "../tasks/task-registry.types.js";
import {
buildActiveMediaGenerationTaskPromptContextForSession,
buildMediaGenerationTaskStatusDetails,
buildMediaGenerationTaskStatusText,
findActiveMediaGenerationTaskForSession,
getMediaGenerationTaskProviderId,
isActiveMediaGenerationTask,
} from "./media-generation-task-status-shared.js";
export const IMAGE_GENERATION_TASK_KIND = "image_generation";
const IMAGE_GENERATION_SOURCE_PREFIX = "image_generate";
export function isActiveImageGenerationTask(task: TaskRecord): boolean {
return isActiveMediaGenerationTask({
task,
taskKind: IMAGE_GENERATION_TASK_KIND,
});
}
export function getImageGenerationTaskProviderId(task: TaskRecord): string | undefined {
return getMediaGenerationTaskProviderId(task, IMAGE_GENERATION_SOURCE_PREFIX);
}
export function findActiveImageGenerationTaskForSession(
sessionKey?: string,
): TaskRecord | undefined {
return findActiveMediaGenerationTaskForSession({
sessionKey,
taskKind: IMAGE_GENERATION_TASK_KIND,
sourcePrefix: IMAGE_GENERATION_SOURCE_PREFIX,
});
}
export function buildImageGenerationTaskStatusDetails(task: TaskRecord): Record<string, unknown> {
return buildMediaGenerationTaskStatusDetails({
task,
sourcePrefix: IMAGE_GENERATION_SOURCE_PREFIX,
});
}
export function buildImageGenerationTaskStatusText(
task: TaskRecord,
params?: { duplicateGuard?: boolean },
): string {
return buildMediaGenerationTaskStatusText({
task,
sourcePrefix: IMAGE_GENERATION_SOURCE_PREFIX,
nounLabel: "Image generation",
toolName: "image_generate",
completionLabel: "image",
duplicateGuard: params?.duplicateGuard,
});
}
export function buildActiveImageGenerationTaskPromptContextForSession(
sessionKey?: string,
): string | undefined {
return buildActiveMediaGenerationTaskPromptContextForSession({
sessionKey,
taskKind: IMAGE_GENERATION_TASK_KIND,
sourcePrefix: IMAGE_GENERATION_SOURCE_PREFIX,
nounLabel: "Image generation",
toolName: "image_generate",
completionLabel: "images",
});
}