import type { MediaCapabilities, MediaRuntime } from "@rakazo/adapter-kit"; import type { PrismaClient } from "@rakazo/db"; import { ensureStudioBot } from "@rakazo/db"; import { getLogger } from "@rakazo/logging"; /** * Generation or transcription only run once the deployment owner set up a media server; local * edits (ffmpeg, image tools) are always there and alone do not call for a specialist. */ export function mediaBackendsConfigured(capabilities: MediaCapabilities): boolean { return capabilities.generate_image || capabilities.generate_video || capabilities.transcribe; } /** * Creates the user's Studio specialist the first time their main bot runs with a media server * configured, so the specialist directory lists it from that run on. Never fails the run. */ export async function ensureStudioWhenMediaConfigured( deps: { prisma: PrismaClient; media?: Pick }, run: { userId: string; spaceId: string }, ): Promise { if (!deps.media) return; try { if (!mediaBackendsConfigured(await deps.media.capabilities(run.spaceId))) return; await ensureStudioBot(deps.prisma, run.userId); } catch (error) { getLogger().error("studio specialist", error); } }