mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-11-12 14:00:35 +00:00
* fix(skills): give a bracketed literal in the userinfo slot no host on every Python `_http_host` answered from `urlsplit(url).hostname`, which decides the ambiguous authority `http://[::1]@Example.COM/api` differently across interpreters: 3.12 reads the bracketed part as userinfo and returns the host `example.com`, 3.13 rejects the authority and `urlsplit` raises, so the helper returns None. The same URL got two different answers depending on the runtime. The answer is not cosmetic: `_is_outbound_url` compares it against `_LOCAL_HTTP_HOSTS`, so whether a URL counts as local or outbound moved with the interpreter. The test table added with the surrounding refactor (#7950) already states the intended answer, None, which is why `tests/test_skillscan_native.py` fails on 3.12 and passes on 3.13. The bracketed-literal case is now rejected before `hostname` is read, so the answer no longer depends on that URL-parsing change, and the shape keeps the treatment the other malformed authorities get: no host, therefore outbound. The test table also gains a bracketed literal with an IPv6 host and a port (`http://[2001:DB8::1]@example.com:8443/api`), so a fix that only special-cased the exact URL from the failure cannot pass. On 3.12: `tests/test_skillscan_native.py` goes from 1 failed / 387 passed to 388 passed, and the skillscan suite (834 tests) passes. Reverting only the orchestrator change puts both bracketed cases back to failing. * fix(skills): reject raw brackets in URL userinfo --------- Co-authored-by: lxcxjxhx <lxcxjxhx@users.noreply.github.com> Co-authored-by: Willem Jiang <willem.jiang@gmail.com>