6 Commits
Author SHA1 Message Date
Leadaxe c35ccd0ea7 fix(build): restore with_clash_api on desktop/CLI — drop is AAR-only
SPEC 014 dropped with_clash_api because LxBox (Android) drives the core
over the native libbox CommandClient, making the Clash REST server dead
weight in the AAR. But the drop landed in the shared Makefile.lx LX_TAGS,
which also feeds every desktop/CLI release build (mac/windows/linux-musl
via `make -s lx-print-tags`). A CLI binary has no CommandClient channel —
it is managed by external dashboards (yacd/MetaCubeXD) over the Clash REST
API — so every desktop release since rc.1 shipped with no way to manage
the core; a config with experimental.clash_api failed fast. CI stayed
green (lx-ci BASE_TAGS kept the tag), so it was invisible in CI.

Restore with_clash_api to the desktop LX_TAGS; leave build_libbox (AAR)
unchanged. The two tag sets now diverge by design: desktop = with Clash
API, AAR = without.

Verified: desktop binary builds with with_clash_api in Tags; `check`
accepts an experimental.clash_api config; the Clash REST server comes up
live (endpoints answer 401 security-middleware, not the stub's fail-fast).

Docs: Makefile.lx comment, SPEC 014 (§2/§3.1 scoped to AAR + new §3.4),
lx-release.yml tag comment + notes line, changelog rc.17.
2026-06-30 13:23:53 +03:00
Leadaxe 8a56852d7e lx(1.14): SPEC 014 libbox command-protocol extensions (URLTestOutbound + GetRules)
Restore over the native libbox CommandClient what upstream only exposed through
the dropped Clash API: per-node delay testing and a route+DNS rule-table snapshot.
Both RPCs are a pure bridge (CONSTITUTION §3.6) gated by the with_lx_command tag.

- daemon/started_service.proto: URLTestOutbound + GetRules RPCs and messages under
  the // lx:begin/end lx_command marker; regenerated .pb.go/_grpc.pb.go.
- daemon/started_service_command_lx.go (+ _stub.go): handlers behind with_lx_command,
  stub twin returns codes.Unimplemented. URLTestOutbound resolves an outbound OR an
  endpoint (no OutboundGroup assert), honours link+timeout, error-in-payload Variant B
  (delay==0 && error=="" is success 0ms), history Store/Delete via group.RealTag.
  GetRules returns route + DNS rules split by isDNS.
- adapter/dns.go + dns/router.go: new adapter.DNSRouter.Rules() getter (route Router
  already had one), read under rulesAccess; both under // lx: markers.
- experimental/libbox/command_client_command_lx.go: CommandClient.URLTestOutbound
  (*URLTestOutboundResult, error) and GetRules (RuleIterator, error) — gomobile-bindable
  shapes (the SPEC's bare (uint16,string,error) does not bind); Variant B preserved.
- cmd/internal/build_libbox/main.go: with_lx_command into sharedTags (AAR).
- Makefile.lx: with_lx_command in LX_TAGS; pinned lx-proto/lx-proto-install targets
  (protoc-gen-go v1.36.11, protoc-gen-go-grpc v1.5.1) for reproducible regeneration.
- lx-ci.yml: vet+gofmt cover the lx files; build-check proves both builds toggle the
  stub marker.
- Collateral one-time pin normalisation of managed_service/v2rayapi/v2raygrpc .pb.go
  (audited in SPEC §3.5).

docs(lx-changelog): v1.14.0-lx.1-rc.2. SPEC 014 → accepted.
2026-06-24 03:52:44 +03:00
Leadaxe 57b5b5e5fc lx(1.14): drop with_clash_api, prerelease tags, v1.14.0-lx.1-rc.1
LxBox is moving to manage the core over the native libbox CommandClient
(group/url-test/select/connections streams), so the Clash REST API is dead
weight on the client. Drop with_clash_api from both the Android AAR
(build_libbox sharedTags) and the desktop LX_TAGS. A config referencing
experimental.clash_api now fails fast (no silent fallback); lx configs won't.

lx-release.yml: tags with an -rc.N / -alpha.N / -beta.N suffix now publish as
GitHub pre-releases (--prerelease), so an unverified build never displaces the
stable lx release as Latest.

First build on the upstream 1.14 base. The WG-endpoint GRO fix (010) lands at
the AmneziaWG v0.0.3 submodule source (no downstream guard), but the Android
download-stall path is NOT yet re-verified on hardware -- hence the -rc.1 tag.
2026-06-24 00:11:20 +03:00
Leadaxe 59b9e87ffb lx(004): trim LX_TAGS to client set (drop tailscale/acme); sync spec + README
Desktop LX_TAGS = upstream feature set minus tags irrelevant to a VPN client
(tailscale, ccm/ocm AI-proxy services, acme server cert issuance). AAR drops
tailscale too. README + SPECS/004 (SPEC/PLAN/TASKS) updated to match.
2026-06-09 21:28:00 +03:00
Leadaxe 19e3abcb36 lx(004): LX_TAGS = full upstream set minus server-only ccm/ocm; libbox + release AAR
- desktop LX_TAGS / CI BASE_TAGS: drop with_ccm/with_ocm (server-only services:
  user mgmt + usage + websocket — useless for a client); keep everything else
  (acme/tailscale/naive via with_purego, badtls, our with_xhttp/with_awg)
- libbox sharedTags already exclude ccm/ocm; with_xhttp+with_awg baked into both AARs
- lx-release.yml builds desktop ×6 + android AAR; lx-ci.yml adds android job
2026-06-09 21:12:03 +03:00
Leadaxe da56518e3f lx(001): fork bootstrap — Makefile.lx, -lx version via ldflags, CI skeleton, sample config
- Makefile.lx (new, zero upstream touch): LX_TAGS, ldflags -lx version, lx-build → sing-box
- .github/workflows/lx-ci.yml: build(lx tags)+version+vet+check
- lx-test/config/minimal.json (avoid upstream test/ go module)
- relocate spec refs test/config → lx-test/config
- 001 complete: builds, version 1.13.13-lx.1, check OK; mark folder -C-
2026-06-09 14:36:12 +03:00