diff --git a/apps/framework/harness/run-eval.ts b/apps/framework/harness/run-eval.ts index a64926d7..25230638 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 dc9b520d..6196d349 100644 --- a/packages/core/src/docs-results.ts +++ b/packages/core/src/docs-results.ts @@ -58,7 +58,12 @@ 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' || + (process.env.DOCS_PREVIEW_HOST !== undefined && + /^docs-[a-z0-9-]+-supabase\.vercel\.app$/.test(hostname)) + ); } catch { return false; }