export function parseJsonResponseText(text: string) { const trimmed = text.trim(); if (!trimmed) { throw new Error('LLM returned an empty response.'); } const fencedMatch = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/iu); if (fencedMatch?.[1]) { return JSON.parse(fencedMatch[1].trim()); } const firstBrace = trimmed.indexOf('{'); const lastBrace = trimmed.lastIndexOf('}'); if (firstBrace >= 0 && lastBrace > firstBrace) { return JSON.parse(trimmed.slice(firstBrace, lastBrace + 1)); } return JSON.parse(trimmed); } export function parseLineListContent(text: string, maxItems = 3) { return text .replace(/\r/g, '') .split('\n') .map((line) => line.trim().replace(/^[-*\d.)\s]+/u, '').trim()) .filter(Boolean) .slice(0, maxItems); }