/**
 * 从 Judge 输出中提取 JSON 对象。
 * @param text Judge 模型原始文本
 * @returns 结构化对象;失败时返回 null
 */
export function parseJudgeJson(text: string): { score?: number; reason?: string } | null {
  const blockMatch = text.match(/```json\s*([\s\S]*?)```/i);
  const raw = (blockMatch?.[1] ?? text).trim();
  const start = raw.indexOf('{');
  const end = raw.lastIndexOf('}');
  if (start < 0 || end <= start) {
    return null;
  }
  try {
    const parsed = JSON.parse(raw.slice(start, end + 1)) as { score?: unknown; reason?: unknown };
    return {
      score: typeof parsed.score === 'number' ? parsed.score : undefined,
      reason: typeof parsed.reason === 'string' ? parsed.reason : undefined,
    };
  } catch {
    return null;
  }
}