import { DIARIZATION_FILENAME, type DiarizationRecord, } from "./diarization"; import { sidecar, sidecarField } from "./sidecar-server"; export function coerceDiarization(value: unknown): DiarizationRecord | null { const parsed = value as Partial | null; if ( typeof parsed?.videoId === "string" && typeof parsed.generatedAt === "string" && Array.isArray(parsed.turns) ) { return parsed as DiarizationRecord; } return null; } // Compact (one line + "\n"), as it always was. export const diarizationSidecar = sidecar( DIARIZATION_FILENAME, sidecarField(coerceDiarization), { indent: 0 }, ); export const { path: diarizationPath, load: loadDiarization, write: writeDiarization, } = diarizationSidecar; // Presence of a VALID sidecar. This is the predicate the cleanup guard keys // off, so it deliberately treats a malformed file as absent: a half-written // diarization.json must not be what convinces the sweep it is safe to delete // the only copy of the audio. export async function hasDiarization(videoDir: string): Promise { return (await loadDiarization(videoDir)) !== null; }