Commit Graph

2265 Commits

Author SHA1 Message Date
世界
0b42a02292 Bump version 2026-04-06 23:09:11 +08:00
hdrover
4a2aac6bc9 Fix naive inbound padding bytes 2026-04-06 22:33:11 +08:00
世界
6c430555aa sing: Fix vectorised readv iovec length calculation
This does not seem to affect any actual paths in the sing-box.
2026-04-01 16:16:58 +08:00
世界
c782f63849 Bump version 2026-03-30 23:03:43 +08:00
世界
c5fa529f27 sing: Minor fixes 2026-03-30 22:58:11 +08:00
世界
af60ef7647 platform: Add HTTPResponse.WriteToWithProgress 2026-03-30 22:42:36 +08:00
世界
4a8ef9d5cb quic: Fix protocol client close & Sync hysteria bbr fix 2026-03-30 22:42:36 +08:00
世界
5042967836 Fix naive quic error message 2026-03-30 22:42:36 +08:00
Zhengchao Ding
a19b3a6971 fix(rpm): add vendor field to fpm config to avoid (none) vendor
Co-authored-by: Hyper <hypar@disroot.org>
2026-03-30 22:09:54 +08:00
世界
8cc97afac4 Fix WireGuard shutdown race crashing
Stop peer goroutines before closing the TUN device to prevent
RoutineSequentialReceiver from calling Write on a nil dispatcher.
2026-03-26 16:33:21 +08:00
世界
a8064cf7cd Bump version 2026-03-26 13:28:33 +08:00
世界
75f64acd9f route: Fix query_type never matching in rule_set headless rules 2026-03-26 13:26:18 +08:00
世界
fdfd0ffb07 route: merge rule_set branches into outer rules
Treat rule_set items as merged branches instead of standalone boolean
sub-items.

Evaluate each branch inside a referenced rule-set as if it were merged
into the outer rule and keep OR semantics between branches. This lets
outer grouped fields satisfy matching groups inside a branch without
introducing a standalone outer fallback or cross-branch state union.

Keep inherited grouped state outside inverted default and logical
branches. Negated rule-set branches now evaluate !(...) against their
own conditions and only reapply the outer grouped match after negation
succeeds, so configs like outer-group && !inner-condition continue to
work.

Add regression tests for same-group merged matches, cross-group and
extra-AND failures, DNS merged-branch behaviour, and inverted merged
branches. Update the route and DNS rule docs to clarify that rule-set
branches merge into the outer rule while keeping OR semantics between
branches.
2026-03-25 14:00:29 +08:00
世界
fcdea284e1 release: Refactor release tracks for Linux packages and Docker
Support 4 release tracks instead of 2:
- sing-box / latest (stable release)
- sing-box-beta / latest-beta (stable pre-release)
- sing-box-testing / latest-testing (testing branch)
- sing-box-oldstable / latest-oldstable (oldstable branch)

Track is detected via git branch --contains and git tag,
replacing the old version-string hyphen check.
2026-03-24 15:03:43 +08:00
世界
3564cdf07e route: formalize nested rule_set group-state semantics
Before 8bf01b7ad, nested rule-set evaluation reused the parent rule
match cache. In practice, this meant these fields leaked across nested
evaluation:

- SourceAddressMatch
- SourcePortMatch
- DestinationAddressMatch
- DestinationPortMatch
- DidMatch

That leak had two opposite effects.

First, it made included rule-sets partially behave like the docs'
"merged" semantics. For example, if an outer route rule had:

  rule_set = ["geosite-additional-!cn"]
  ip_cidr  = 104.26.10.0/24

and the inline rule-set matched `domain_suffix = speedtest.net`, the
inner match could set `DestinationAddressMatch = true` and the outer
rule would then pass its destination-address group check. This is why
some `rule_set + ip_cidr` combinations used to work.

But the same leak also polluted sibling rules and sibling rule-sets.
A branch could partially match one group, then fail later, and still
leave that group cache set for the next branch. This broke cases such
as gh-3485: with `rule_set = [test1, test2]`, `test1` could touch
destination-address cache before an AdGuard `@@` exclusion made the
whole branch fail, and `test2` would then run against dirty state.

8bf01b7ad fixed that by cloning metadata for nested rule-set/rule
evaluation and resetting the rule match cache for each branch. That
stopped sibling pollution, but it also removed the only mechanism by
which a successful nested branch could affect the parent rule's grouped
matching state.

As a result, nested rule-sets became pure boolean sub-items against the
outer rule. The previous example stopped working: the inner
`domain_suffix = speedtest.net` still matched, but the outer rule no
longer observed any destination-address-group success, so it fell
through to `final`.

This change makes the semantics explicit instead of relying on cache
side effects:

- `rule_set: ["a", "b"]` is OR
- rules inside one rule-set are OR
- each nested branch is evaluated in isolation
- failed branches contribute no grouped match state
- a successful branch contributes its grouped match state back to the
  parent rule
- grouped state from different rule-sets must not be combined together
  to satisfy one outer rule

In other words, rule-sets now behave as "OR branches whose successful
group matches merge into the outer rule", which matches the documented
intent without reintroducing cross-branch cache leakage.
2026-03-24 15:03:43 +08:00
世界
38e0832cf4 tun: Fix system stack rewriting TUN subnet destinations to loopback 2026-03-23 19:38:55 +08:00
世界
fd28e167b9 Fix DNS transport returning error for empty AAAA response
Closes #3925
2026-03-23 19:21:55 +08:00
世界
e5053ffcda Match package_name in process_path rule on Android 2026-03-23 18:57:35 +08:00
世界
f3a79dda87 Fix package_name shared uid matching 2026-03-23 18:57:35 +08:00
世界
5eefbbb9ed Optimize Darwin process finder 2026-03-23 18:57:35 +08:00
世界
828c324b18 Optimize Linux process finder 2026-03-23 18:57:35 +08:00
世界
60c8e40386 Add process information cache to avoid duplicate lookups
PreMatch and full match phases each created a fresh InboundContext,
causing process search (expensive OS syscalls) to run twice per
connection. Use a freelru ShardedLRU cache with 200ms TTL to serve
the second lookup from cache.
2026-03-23 14:26:45 +08:00
世界
572b4d3477 tailscale: Only set ProcessLocalIPs/ProcessSubnets for fake TUN 2026-03-23 14:16:40 +08:00
世界
f192904009 Fix DialerForICMPDestination 2026-03-23 13:58:55 +08:00
世界
8bf01b7add Fix nested rule-set match cache isolation 2026-03-23 12:26:19 +08:00
世界
fbb51d2cae Reject removed legacy inbound fields instead of silently ignoring 2026-03-21 17:16:10 +08:00
世界
b94b427d8f daemon: Allow StartOrReloadService to recover from FATAL state 2026-03-21 13:37:14 +08:00
世界
3df45319a0 daemon: Fix CloseService leaving instance non-nil on close error 2026-03-21 13:23:57 +08:00
Andrew Novikov
952cce0d8e tun: Fix nfqueue not working in prerouting 2026-03-17 11:05:40 +08:00
世界
53850e99d4 documentation: Fix Chinese link anchors 2026-03-16 12:24:10 +08:00
世界
b0487c6600 documentation: Fix unicode heading anchors 2026-03-16 12:10:32 +08:00
世界
6da6aff8b4 Deprecate Socksaddr.IsFqdn: do not reject potentially valid domain names 2026-03-16 09:37:59 +08:00
世界
ecbdba3e1e Bump version 2026-03-15 17:56:37 +08:00
世界
baf76d88ad Fix connector canceled dial cleanup 2026-03-15 17:56:37 +08:00
深鸣
acf3dd8056 documentation: Minor fixes 2026-03-15 17:56:37 +08:00
世界
6eff43b36d tun: Fix nftables single include_uid not working 2026-03-15 16:58:34 +08:00
世界
ea67013cc8 Fix kTLS crash 2026-03-14 21:38:38 +08:00
世界
5764a92e59 tun: Fix "Fix auto_redirect dropping SO_BINDTODEVICE traffic" 2026-03-14 21:38:38 +08:00
世界
0b388be33c Bump version 2026-03-14 21:38:38 +08:00
世界
2e1cb43042 tun:Fix auto_redirect dropping SO_BINDTODEVICE traffic 2026-03-14 21:38:38 +08:00
世界
e7a770c977 tailscale: Fix system interface rules 2026-03-14 21:38:38 +08:00
世界
673a11379f platform: Add f-droid update helpers 2026-03-11 20:41:29 +08:00
世界
5b27caa338 Add Alpine APK packaging to CI build
Add fpm-based Alpine APK packaging alongside existing DEB/RPM/Pacman
packages. Alpine APKs use `linux` in the filename to distinguish from
OpenWrt APKs which use the `openwrt` prefix.
2026-03-11 20:41:29 +08:00
世界
4bd2a359e3 ccm/ocm: Fix missing metering for 1M context and /fast mode
CCM: Fix 1M context detection - use prefix match for versioned
beta strings (e.g. "context-1m-2025-08-07") and include cache
tokens in the 200K threshold check per Anthropic billing docs.

OCM: Add GPT-5.4 family pricing (standard/priority/flex) with
extended context (>272K) premium pricing support. Add context
window tracking to usage combinations, mirroring CCM's pattern.
Update normalizeGPT5Model defaults to latest known models.
2026-03-11 20:41:29 +08:00
世界
b68394bbe2 Fix tailscale connections 2026-03-11 00:27:15 +08:00
世界
ab1fb1dce0 documentation: Update ocm/ccm examples 2026-03-10 22:04:12 +08:00
世界
0153ec1a69 Fix OCM websocket proxy lifecycle and headers 2026-03-10 22:04:11 +08:00
世界
b8a398a9a5 ccm/ocm: Add by_user_and_week cost summary 2026-03-10 22:04:11 +08:00
世界
7388824759 ocm: Add Responses WebSocket API proxy and fix client config docs
Support the OpenAI Responses WebSocket API (`wss://.../v1/responses`)
for bidirectional frame proxying with usage tracking.
Fix Codex CLI client config examples to use profiles and correct flags.

Update openai-go v3.24.0 → v3.26.0.
2026-03-10 22:04:11 +08:00
世界
bbedd5383a tailscaile: Fix using TUN auto redirect with tailscale system interface 2026-03-10 22:04:11 +08:00