export type MediaUnderstandingKind = | "audio.transcription" | "video.description" | "image.description"; export type MediaUnderstandingCapability = "image" | "audio" | "video"; export type MediaAttachment = { path?: string; url?: string; mime?: string; index: number; }; export type MediaUnderstandingOutput = { kind: MediaUnderstandingKind; attachmentIndex: number; text: string; provider: string; model?: string; }; export type MediaUnderstandingDecisionOutcome = | "success" | "skipped" | "disabled" | "no-attachment" | "scope-deny"; export type MediaUnderstandingModelDecision = { provider?: string; model?: string; type: "provider" | "cli"; outcome: "success" | "skipped" | "failed"; reason?: string; }; export type MediaUnderstandingAttachmentDecision = { attachmentIndex: number; attempts: MediaUnderstandingModelDecision[]; chosen?: MediaUnderstandingModelDecision; }; export type MediaUnderstandingDecision = { capability: MediaUnderstandingCapability; outcome: MediaUnderstandingDecisionOutcome; attachments: MediaUnderstandingAttachmentDecision[]; }; export type AudioTranscriptionRequest = { buffer: Buffer; fileName: string; mime?: string; apiKey: string; baseUrl?: string; headers?: Record; model?: string; language?: string; prompt?: string; query?: Record; timeoutMs: number; fetchFn?: typeof fetch; }; export type AudioTranscriptionResult = { text: string; model?: string; }; export type VideoDescriptionRequest = { buffer: Buffer; fileName: string; mime?: string; apiKey: string; baseUrl?: string; headers?: Record; model?: string; prompt?: string; timeoutMs: number; fetchFn?: typeof fetch; }; export type VideoDescriptionResult = { text: string; model?: string; }; export type ImageDescriptionRequest = { buffer: Buffer; fileName: string; mime?: string; model: string; provider: string; prompt?: string; maxTokens?: number; timeoutMs: number; profile?: string; preferredProfile?: string; agentDir: string; cfg: import("../config/config.js").ClawdbotConfig; }; export type ImageDescriptionResult = { text: string; model?: string; }; export type MediaUnderstandingProvider = { id: string; capabilities?: MediaUnderstandingCapability[]; transcribeAudio?: (req: AudioTranscriptionRequest) => Promise; describeVideo?: (req: VideoDescriptionRequest) => Promise; describeImage?: (req: ImageDescriptionRequest) => Promise; };