# Tinyproxy Filter: ONE regex per line, matched against the bare
# domain for CONNECT requests (the log shows e.g. filtered domain
# "xcmapi.org" -- no scheme, no :port suffix).
#
# CRITICAL: Tinyproxy compiles these as POSIX BASIC regex, not
# extended regex. Extended syntax (+ ? ( ) |) does NOT work here:
# an extended-style anchored pattern (^(.+\.)?xcmapi\.org$) was
# verified on 2026-10-26 to deny even xcmapi.org itself, while the
# basic-syntax equivalent below allows it. In basic regex, groups
# are \(...\), repetition of a group is \(...\)*, and + ? ( ) are
# literal characters. Do NOT "modernize" these patterns.
#
# Each entry is anchored (^...$) to the domain and its subdomains
# only: a bare substring "github.com" would also match
# "evilgithub.com". The \(.*\.\)* prefix matches zero or more
# "label." segments, so xcmapi.org and api.xcmapi.org match, while
# notxcmapi.org and xcmapi.org.evil.com do not.
^\(.*\.\)*xcmapi\.org$
^\(.*\.\)*github\.com$
^\(.*\.\)*githubusercontent\.com$
^\(.*\.\)*pypi\.org$
^\(.*\.\)*pythonhosted\.org$
^\(.*\.\)*npmjs\.org$
# Web search MCP v1 (see docs/web-search-mcp.md). Each line is the
# API host's domain, subdomains included, in the same BASIC form.
# searx.diante.me is exact-only on purpose: a \(.*\.\)*diante.me$
# line would also let tasks reach api.diante.me (the control plane).
^\(.*\.\)*perplexity\.ai$
^\(.*\.\)*exa\.ai$
^\(.*\.\)*tavily\.com$
^\(.*\.\)*search\.brave\.com$
^\(.*\.\)*duckduckgo\.com$
^searx\.diante\.me$
# live-info primary sources (2026-10-30, user-approved): time
# APIs + weather primary sources only, so web_fetch can verify
# numbers instead of failing 403 Filtered. Deliberately NOT
# included: time.is / time.org.cn / time.ms (commercial or
# secondary time sites; worldtimeapi + timeapi cover time),
# and no general news/social domains -- the whitelist stays
# fail-closed, these are the only fetch destinations live-info
# needs. Each line is domain + subdomains, same BASIC form.
^\(.*\.\)*worldtimeapi\.org$
^\(.*\.\)*timeapi\.io$
^\(.*\.\)*open-meteo\.com$
^\(.*\.\)*weather\.com\.cn$
^\(.*\.\)*meteoblue\.com$
^\(.*\.\)*accuweather\.com$
# Platform browser programming sources (2026-11-01, feat-platform-browser).
# Only programming sources: official docs, GitHub, package registries,
# Stack Overflow, CVE/NVD. Deliberately NOT included: shopping, social,
# mail, general news, video sites. Same BASIC form as above.
# Already present above, not duplicated here: github.com, pypi.org,
# npmjs.org (plus pythonhosted.org for pip). Notes on coverage:
# docs.python.org is covered by the python.org line (subdomain rule);
# docs.rust-lang.org by rust-lang.org; nodejs.org docs live on
# nodejs.org itself. developer.mozilla.org is scoped to that host
# only, NOT a mozilla.org wildcard, so no other Mozilla host opens.
^\(.*\.\)*python\.org$
^\(.*\.\)*nodejs\.org$
^\(.*\.\)*go\.dev$
^\(.*\.\)*pkg\.go\.dev$
^\(.*\.\)*rust-lang\.org$
^\(.*\.\)*developer\.mozilla\.org$
^\(.*\.\)*crates\.io$
^\(.*\.\)*stackoverflow\.com$
^\(.*\.\)*cve\.mitre\.org$
^\(.*\.\)*nvd\.nist\.gov$
