From 6ac64e035adf31b8dbeb8b3c1a95870c2e5c26ab Mon Sep 17 00:00:00 2001 From: Self-Managing Codebase Manager <7004983+WillTaylor22@users.noreply.github.com> Date: Tue, 26 May 2026 10:21:03 +0000 Subject: [PATCH] ENG-22: inject VERCEL_BLOB_API_URL into agent session env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @vercel/blob's put() defaults its control-plane host to https://vercel.com/api/blob, which is blocked at the agent sandbox's egress (x-deny-reason: host_not_allowed). put() hangs in @vercel/async-retry until timeout — silently, no useful error. PR #11 confirmed the workaround: VERCEL_BLOB_API_URL=https://blob.vercel-storage.com (which is allowlisted) makes the SDK target that host instead. The current step 4(j) flow uses curl direct to blob.vercel-storage.com so doesn't hit the SDK path, but any future capture/upload script that imports @vercel/blob would silently retry-loop without this var. Set it alongside BLOB_READ_WRITE_TOKEN in the local-CLI tick.ts session env (the only place either is currently set). Cheap insurance; no behavior change for the current curl-based flow. ai-manager/src/tick.ts: one line added to the sessionEnv string. --- ai-manager/src/tick.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ai-manager/src/tick.ts b/ai-manager/src/tick.ts index 291a9a4..2675213 100644 --- a/ai-manager/src/tick.ts +++ b/ai-manager/src/tick.ts @@ -35,7 +35,8 @@ console.log(`Session: ${session.id}`); const sessionEnv = `Session env (export these at the start of your shell, before any other work): export BLOB_READ_WRITE_TOKEN='${BLOB_READ_WRITE_TOKEN}' -The token is scoped to the public 'pr-media-2' Vercel Blob store — used by step 4(j) to upload PR preview media.`; + export VERCEL_BLOB_API_URL='https://blob.vercel-storage.com' +The token is scoped to the public 'pr-media-2' Vercel Blob store — used by step 4(j) to upload PR preview media. VERCEL_BLOB_API_URL pins @vercel/blob's control-plane host to one in the sandbox egress allowlist (the SDK default vercel.com/api/blob is blocked, causing put() to hang in async-retry; ENG-22).`; const baseGoal = customGoal ||