← GPT-AI-LP
CODE · 1.5 KB

scripts/diagnose-runtime-output.mjs

Workspace snapshot · 08/31 23:51

import {
  parseHeadlineResult,
  parseLpResult,
  parseQualityGate,
} from "../src/runtime-prompt.js";

const { SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY } = process.env;
if (!SUPABASE_URL || !SUPABASE_SERVICE_ROLE_KEY) throw new Error("Supabase diagnostics credentials are missing");

const response = await fetch(
  `${SUPABASE_URL}/rest/v1/llm_runtime_jobs?service_id=eq.agent-gpt-ai-lp&status=eq.COMPLETED&select=id,created_at,output&order=created_at.desc&limit=5`,
  { headers: { apikey: SUPABASE_SERVICE_ROLE_KEY, Authorization: `Bearer ${SUPABASE_SERVICE_ROLE_KEY}` } },
);
if (!response.ok) throw new Error(`Diagnostics query failed: ${response.status}`);
const jobs = await response.json();

for (const job of jobs) {
  const raw = String(job.output?.text || "");
  const result = { id: job.id, createdAt: job.created_at, length: raw.length };
  try {
    result.sections = parseLpResult(raw).length;
    result.headlines = parseHeadlineResult(raw).length;
    result.qualityGate = parseQualityGate(raw);
    result.valid = true;
  } catch (error) {
    result.valid = false;
    result.error = error instanceof Error ? error.message : String(error);
    result.issues = error?.issues || [];
    const position = Number(String(result.error).match(/position\s+(\d+)/u)?.[1]);
    if (Number.isFinite(position)) {
      result.errorPosition = position;
      result.errorCharacter = raw[position];
      result.aroundError = raw.slice(Math.max(0, position - 100), position + 180);
    }
  }
  console.log(JSON.stringify(result, null, 2));
}