From d4aed00e2c437d1aa817b3a4cc04588fa841c541 Mon Sep 17 00:00:00 2001 From: Miranda Limonczenko Date: Thu, 12 Nov 2026 08:28:18 -0800 Subject: [PATCH 1/2] chore: scratch preview host for docs evals (not for merge) DOCS_PREVIEW_HOST swaps the docs host in the prompt and lets the docs host check accept it. --- apps/framework/harness/run-eval.ts | 9 ++++++++- packages/core/src/docs-results.ts | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/framework/harness/run-eval.ts b/apps/framework/harness/run-eval.ts index a64926d76..252306381 100644 --- a/apps/framework/harness/run-eval.ts +++ b/apps/framework/harness/run-eval.ts @@ -380,10 +380,17 @@ async function runOne( cliVersion?: string; } > { - const prompt = parseEvalMarkdown( + const previewHost = process.env.DOCS_PREVIEW_HOST; + const parsedBody = parseEvalMarkdown( readFileSync(ev.promptPath, 'utf8'), ev.promptPath ).body; + const prompt = previewHost + ? parsedBody.replaceAll( + 'https://supabase.com/docs/', + `https://${previewHost}/docs/` + ) + : parsedBody; // A CLI agent always runs in a sandbox and reads skills from disk with its // file tools (both modes). An in-process (ai-sdk) agent has no sandbox, so in // tools mode its skills are advertised in the prompt and loaded via the diff --git a/packages/core/src/docs-results.ts b/packages/core/src/docs-results.ts index dc9b520dd..f3326606a 100644 --- a/packages/core/src/docs-results.ts +++ b/packages/core/src/docs-results.ts @@ -58,7 +58,10 @@ const URL_IN_COMMAND_PATTERN = /https?:\/\/[^\s'"`\\;|&>()]+/g; */ function isSupabaseApexUrl(value: string): boolean { try { - return new URL(value).hostname === 'supabase.com'; + const hostname = new URL(value).hostname; + return ( + hostname === 'supabase.com' || hostname === process.env.DOCS_PREVIEW_HOST + ); } catch { return false; } From 0ecdb11bc307cbde53916e7afe1c5d69a462c8ff Mon Sep 17 00:00:00 2001 From: Miranda Limonczenko Date: Thu, 12 Nov 2026 10:31:55 -0800 Subject: [PATCH 2/2] chore: accept per-deployment preview hosts (not for merge) --- packages/core/src/docs-results.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/docs-results.ts b/packages/core/src/docs-results.ts index f3326606a..6196d3497 100644 --- a/packages/core/src/docs-results.ts +++ b/packages/core/src/docs-results.ts @@ -60,7 +60,9 @@ function isSupabaseApexUrl(value: string): boolean { try { const hostname = new URL(value).hostname; return ( - hostname === 'supabase.com' || hostname === process.env.DOCS_PREVIEW_HOST + hostname === 'supabase.com' || + (process.env.DOCS_PREVIEW_HOST !== undefined && + /^docs-[a-z0-9-]+-supabase\.vercel\.app$/.test(hostname)) ); } catch { return false;