deep-research skill: Fetch-stage agents fall back to fetch:unknown label when Search returns non-absolute URLs
In the built-in deep-research Workflow skill, the Fetch-stage agent() label is derived like this:
let host = "unknown"
try { host = new URL(source.url).hostname.replace(/^www\./, "") } catch {}
return agent(FETCH_PROMPT(source, searchResult.angle), { label: "fetch:" + host, ... })
SEARCH_SCHEMA only requires url: { type: "string" } — no format: "uri" and no prompt instruction demanding a fully-qualified absolute URL. When a Search-stage agent returns a scheme-less or malformed URL (e.g. irs.gov instead of https://irs.gov), new URL() throws, the catch {} silently swallows it, and the label falls back to the generic "unknown".
Because a single Search run's results share the same formatting quirks, this isn't a one-off — a whole run's Fetch stage can collapse to dozens of identical fetch:unknown rows in the Background Tasks panel at once, even though the fetches themselves succeed (WebFetch tolerates the malformed URL better than URL() does). Net effect: real work happening, but zero visibility into which source each row corresponds to.
Suggested fix: before parsing, normalize a scheme-less URL (e.g. prepend https:// if !/^https?:\/\//.test(source.url)) rather than only catching-and-discarding; optionally add format: "uri" to SEARCH_SCHEMA.properties.url so malformed URLs are rejected upstream instead of silently degrading the label.
Observed on a deep-research run with 5 search angles / 30+ fetch sources, where the majority of Fetch-stage rows showed fetch:unknown in the Background Tasks panel.