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));
}