Commit Graph

12 Commits

Author SHA1 Message Date
teknium1
45a4db2225 fix(web): key extract cache on metadata.sourceURL too, pin redirect case
Follow-up to the cherry-picked "cache extracts by returned URL": Keenable and
Firecrawl report the post-redirect address in `url` and the REQUESTED URL in
`metadata.sourceURL`, so matching on `url` alone left every redirected page
uncached. Accept either field, as long as it names a URL from this batch;
anything else is served but never cached (a miss re-fetches, a mis-key poisons
the cache for the whole TTL). Docs: say the cache key is the requested URL the
provider reports, not the batch position.

Co-authored-by: nemofq <5635994+nemofq@users.noreply.github.com>
Co-authored-by: wooyongbin3-cpu <256294002+wooyongbin3-cpu@users.noreply.github.com>
2026-09-15 18:42:38 -07:00
KoNit-K
ffd02f37e8 fix(web): cache extracts by returned URL 2026-09-15 18:42:38 -07:00
liuhao1024
0e13fa98ec fix(web): cap web_extract provider dispatch with a wall-clock timeout (salvage #57180)
A provider whose backend keeps the response open without finishing (hanging
HTTP server, stuck SDK call) stalled the web_extract tool call — and with a
sync provider, the borrowed thread — indefinitely. The dispatch in
tools/web_tools_extract._dispatch_extract now runs under asyncio.wait_for with
web.extract_timeout (config.yaml, default 120s; 0 disables). On timeout the
tool returns structured per-URL error entries, and the one-shot keyless rescue
still gets its chance when eligible.

Salvaged from PR #57180 by @liuhao1024 (base predated the web_tools
decomposition; re-applied at the _dispatch_extract seam, env-var timeout
replaced with the web.* config section per the .env-is-for-secrets rule, and
the timeout path made rescue-aware).

Inspired by Claude Code 2.1.268: "Fixed WebFetch hanging indefinitely on a
server that keeps the response open without finishing; a fetch now fails
after 300 seconds."

Fixes #57155

Co-authored-by: liuhao1024 <sunsky.lau@gmail.com>
2026-09-12 21:30:38 -07:00
Teknium
4140901d15 fix(browser): stop refusing credential-named query params on cloud browser/extract backends
browser_navigate / browser_exec / web_extract refused any URL whose query carried a
credential-NAMED parameter (token, signature, access_token, ...) when the backend was
a cloud provider. That is exactly the shape of magic links, OAuth callbacks and signed
CDN assets, so on Browserbase/Browser Use the agent could not finish a sign-in flow or
open an X video asset ("Blocked: URL contains a credential-like query parameter").

The floor protected nothing: the cloud browser already sees every cookie and typed
password of the session, and with the credential vault it receives the real password at
fill time. Hermes' own secrets leaking into a URL stay blocked by the value-shaped
_PREFIX_RE check (_secret_url_error), which is backend-independent. IMDS and
private-address floors are unchanged.
2026-09-10 10:35:07 -07:00
Teknium
2ed36eff40 simplify(compat): web_tools — drop 35 re-exports/aliases, repoint 2 callers + 6 test files 2026-09-03 13:08:53 -07:00
Teknium
345e3d7dc5 refactor(tools): flatten xai TTL coercion and extract-provider fallback text 2026-09-03 00:01:01 -07:00
Teknium
61f834bfec refactor(tools): collapse xai config-resolution chain, inline single-use web/x_search helpers, flatten guard ladders 2026-09-02 23:54:07 -07:00
Teknium
cccc84a237 refactor(tools): fold debug-error into _finish_debug, clamp-or-default helper, compact cache/policy control flow 2026-09-02 23:14:03 -07:00
Teknium
3106197c40 refactor(tools): derive _LEGACY_WEB_BACKENDS from probe table, top-level selection helpers, fold single-use policy/cache helpers 2026-09-02 22:57:35 -07:00
Teknium
ab5f70073e refactor(tools): registry-call helper, refusal helper, dedupe policy rules via dict.fromkeys, compact web docstrings 2026-09-02 22:25:21 -07:00
Teknium
151119e61c refactor(tools): unify web_tools debug-error/merge helpers, drop __main__ demo, compact web cache/policy/rescue 2026-09-02 22:10:50 -07:00
Teknium
8b3dde5dcc refactor(tools/web): split web_tools into truncate/extract siblings; dispatch tables for backend probes and stdlib extractors; compact url_safety/website_policy/result cache 2026-09-02 14:45:42 -07:00