28 Commits
Author SHA1 Message Date
chuan 79c197ee33 feat: add hidden chuan node search preset 2026-08-24 18:41:01 +08:00
chuan a93c206ac5 feat: add default ips 2026-06-26 17:53:20 +08:00
chuan 096e70fe54 feat: add a zero-install web UI for easy over an extracted engine
- extract the headless search out of `easy` into an engine that
  measures the baseline, resolves the target, and drives the
  producer/consumer loop, so the CLI and web share one search
- make `State` fully observable — structured discovery feed, run phase,
  baseline/target, and final outcome — and render the same snapshots two
  ways: the in-place terminal panel and an SSE stream
- serve a small embedded page (HTML/JS/Pico baked in via include_str!)
  on a hand-rolled hyper service: POST /api/run runs one search at a
  time, GET /api/events streams live snapshots as JSON until it settles
- open the UI on a bare invocation (double-clicked binary); `web` with
  --host/--port/--no-open controls it explicitly
- bump to 0.2.0
v0.2.0
2026-06-26 10:51:23 +08:00
chuan 9de35210b7 feat: rework easy with pipelined discovery, solo-confirm, and a live panel 2026-06-26 01:51:23 +08:00
chuan a0425324c0 feat: provide a easy way to search the best ip 2026-06-24 21:50:19 +08:00
chuan 4126f78682 fix: align the result tables and size the IP column to content
- compute the IP column width from the widest address instead of a
  fixed 39 (which left a big gap for IPv4-only output)
- left-align the latency and speed columns so the header labels line up
  with their values, instead of right-aligning into a wide field
- keep the colored speed as the last column so it needs no width padding
2026-06-24 01:51:51 +08:00
chuan 02b33a3e6d feat: report speed in MB/s instead of Mbps
- drop the *8 bit conversion so throughput is MB/s, matching what
  clients like v2rayN display
- rename speed_mbps -> speed_mbs across speed/report/commands
- narrow the ranking bucket to 0.1 MB/s so slow (~0.1-0.3 MB/s) nodes
  still separate by speed instead of collapsing into one bucket
- update table/CSV/alias labels, color thresholds, --min-speed help,
  and README
2026-06-24 01:45:33 +08:00
chuan a28baad004 style: clear two clippy warnings in the ws byte stream
- io::Error::new(ErrorKind::Other, e) -> io::Error::other(e)
- drop the useless .into() on buf.to_vec() in the binary frame send
2026-06-24 01:42:04 +08:00
chuan dbea080708 feat: default auto lat-top and speed-top to 0 (keep all)
- lat-top now defaults to 0 so every IP within --lat-max feeds the speed
  stage, instead of capping at the fastest 30
- speed-top now defaults to 0 so every IP passing --min-speed is written
  to result.txt, instead of capping at 10
- downstream truncation already treats 0 as keep-all; update README
2026-06-24 01:37:26 +08:00
chuan 27d4b8d20d feat: weight ping sampling toward productive segments
- sample each CF segment in proportion to its Laplace-smoothed valid-hit
  rate (hits+1)/(attempts+2), so segments that keep failing fade out and
  the probe budget flows to ones actually yielding IPs
- switch to a FuturesUnordered scheduler that refills each freed slot
  using the weights learned so far, giving a live feedback loop instead
  of the prefetch-decoupled buffer_unordered
- untried segments start at 0.5 for fair exploration; the smoothing floor
  keeps a starved segment from being permanently killed off
2026-06-23 23:52:23 +08:00
chuan 47c11985e8 feat: show why an IP failed the latency stage
- classify each result as ok / too slow / failed(reason) instead of a
  bare pass-or-fail, mirroring the ping stage's live feed
- surface a concise reason (timeout, tcp connect, ws handshake, http
  status, ...) from the error's outermost context
- label the inner TLS handshake so its failure reads cleanly instead of
  dumping a raw rustls error
2026-06-23 23:44:23 +08:00
chuan 0db5111267 feat: sample latency multiple times and tolerate keep-alive drops
- time several round-trips on the warm connection and report the
  fastest, shedding transient network jitter
- time the warm-up request too and fall back to it if the node won't
  honour keep-alive, instead of failing the IP outright
- stop at the first reuse failure and keep the samples already gathered
2026-06-23 23:41:33 +08:00
chuan 125a3b342e feat: stop speed test at steady state instead of fixed window
- restore the auto speed timeout to 10s as a hard cap
- measure throughput over 500ms windows from the first body byte and
  return as soon as a window stops climbing (TCP slow start is over),
  so the result is the real steady-state speed, not a slow-start-dragged
  average
- fall back to the overall average if the transfer ends before settling
2026-06-23 23:41:33 +08:00
chuan e79a55a611 fix: measure steady-state latency instead of cold connect
- exclude the one-time tunnel + inner TLS setup from the timing, which
  was inflating latency ~5x over the real per-request RTT
- send a throwaway warm-up request, then time a second request on the
  warm keep-alive connection (matches what clients like v2rayN report)
- extract request_once helper for the keep-alive GET + response parse
2026-06-23 23:32:34 +08:00
chuan ffe32f4dac feat: stream ping probes and enrich live progress
- replace the two-phase availability pre-scan with a single-stage
  continuous stream that round-robins segments and keeps concurrency
  probes in flight, so a slow unreachable IP only blocks its own slot
- drop the now-unused --probe-sample knob
- show per-probe reasons (unreachable / too fast / too slow / loss) in
  the live feed across all stages
- cut the auto speed timeout to 5s
2026-06-23 23:31:21 +08:00
chuan 7dec1e0479 docs: document auto ping-max and lat-max options 2026-06-23 21:47:02 +08:00
chuan e19afd2415 feat: expose ping and latency max-latency filters in auto 2026-06-23 21:47:02 +08:00
chuan dae70dbf83 docs: add network topology and pipeline diagrams 2026-06-23 21:41:41 +08:00
chuan 93cffaf3ae feat: add speed-concurrency option to auto pipeline 2026-06-23 21:41:41 +08:00
chuan 5c112a92af docs: update readme 2026-06-23 21:21:17 +08:00
chuan af9e09148e feat: add auto pipeline as default top-level command 2026-06-23 21:09:00 +08:00
chuan 39080678bb refactor: split main into cli, commands, and report modules 2026-06-23 20:59:18 +08:00
chuan a86d5ffabc feat: add min_speed option to speed measurement for filtering results 2026-06-23 20:34:07 +08:00
chuan 2e530e916d feat: add max_latency and top options to latency measurement 2026-06-23 20:29:48 +08:00
chuan a2e0d7d318 feat: enhance ping configuration with latency and loss filtering options 2026-06-23 20:21:35 +08:00
chuan 426a40b2ef feat: add speed measurement and export functionality 2026-06-23 20:15:02 +08:00
chuan 9aefddd059 feat: add latency measurement and VLESS connection handling 2026-06-23 19:58:01 +08:00
chuan b3d6a5352e feat: init 2026-06-23 19:29:34 +08:00