mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-25 21:31:43 +00:00
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.
68 lines
2.1 KiB
TypeScript
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",
|
|
});
|
|
}
|