/** Extrae el primer JSON (array u objeto) de una respuesta de LLM, tolerando fences y texto previo. Lanza si no parsea. */
export function extraerJson<T>(texto: string): T {
  const m = texto.match(/```(?:json)?\s*([\s\S]*?)```/);
  const raw = (m ? m[1] : texto).trim();
  const ini = raw.search(/[[{]/);
  if (ini < 0) throw new Error('Sin JSON en la respuesta');
  return JSON.parse(raw.slice(ini)) as T;
}
