import type { PromptLocale } from '../../types' export interface ProblemFramingStep { title: string content: string } export interface ProblemFramingPlan { mode: 'clarify' | 'invent' headline: string summary: string steps: ProblemFramingStep[] visualMotif: string designerHint: string } function stripCodeFence(text: string): string { return text .replace(/^```json\s*/i, '') .replace(/^```\s*/i, '') .replace(/\s*```$/, '') .trim() } export function extractProblemFramingJson(text: string): string { const cleaned = stripCodeFence(text) if (/^\s* { const item = step && typeof step === 'object' ? step as { title?: unknown; content?: unknown } : {} return { title: sanitizeString(item.title, `${fallbackStepTitle} ${index + 1}`), content: sanitizeString(item.content, ''), } }) .filter((step) => step.content) while (normalizedSteps.length < 3) { normalizedSteps.push({ title: `${fallbackStepTitle} ${normalizedSteps.length + 1}`, content: fallbackStepContent, }) } return { mode: input.mode === 'clarify' ? 'clarify' : 'invent', headline: sanitizeString(input.headline, fallbackHeadline), summary: sanitizeString(input.summary, fallbackSummary), steps: normalizedSteps, visualMotif: sanitizeString(input.visualMotif ?? input.visual_motif, fallbackMotif), designerHint: sanitizeString(input.designerHint ?? input.designer_hint, fallbackHint), } }