Skip to main content

Единый VLESS/Trojan-шлюз (xray-core): не-RU egress со smart-routing для проброса прокси в любой проект/сервис; обход гео-блокировок и РКН-DPI. Импорт подписки (multi-UA), авто-обновление, пинг/выбор лучших нод, пул именованных инстансов (PIN/BAL) с разметкой по подписке, self-heal, autostart; фасад Gateway + адаптеры httpx/requests/playwright/telethon.

Project description

sh-xray — единый VPN-шлюз (skill-hub xray) для всех AI-навыков

Один общий SOCKS5-прокси (xray-core) с НЕ-российской нодой и smart-routing (РУ/CN → напрямую, остальное → за рубеж). Пишет общий указатель ~/.sh-xray.json, который читают ВСЕ навыки (паттерн open_client._apply_proxy). Системный трафик НЕ трогает (только opt-in инструменты через ALL_PROXY) — РУ-сервисы не ломаются.

Команды

CLI xray-gate — на clikit (даёт --json/--help/--version):

xray-gate install            # xray binary + geoip/geosite (качает с GitHub-релиза XTLS/Xray-core)
xray-gate test               # выбрать рабочую НЕ-RU ноду (проверка реального выхода через ipinfo.io)
xray-gate start [--port N]   # поднять + записать ~/.sh-xray.json (порт по умолч. 10810)
xray-gate status             # alive + live exit country
xray-gate stop
xray-gate ensure             # self-heal: поднять, если процесс умер (после reboot/краша)
xray-gate autostart          # Windows Task Scheduler: ensure каждые 10 мин (переживает reboot)
xray-gate autostart --remove
xray-gate add-sub <url>      # своя VLESS-подписка (vless/base64; авто-обновление по интервалу подписки)

Без установки китов (свежая машина, handoff-бандл) — тот же набор через dep-free ядро: python xray_gate/_core.py <команда> (чистый stdlib, никаких зависимостей). Именно его дёргает watchdog (ensure каждые 10 мин), чтобы self-heal не зависел от китов.

Построен на Китах (S-kits)

sh-xray — НЕ кит, а супернавык/сервис, который строится на китах: clikit даёт человеческий CLI (xray_gate/cli.py), librarykit.config_util — атомарную запись общих указателей (~/.sh-xray.json, ~/.sh-gateway.json). Ядро-движок (xray_gate/_core.py, бывший top-level gateway.py) намеренно остаётся на чистом stdlib — у обоих kit-обращений есть stdlib-фолбэк, поэтому self-heal работает даже без китов. gateway-роутер потребляет egress sh-xray через свой ProxyProvider (читает ~/.sh-xray.json).

Переживает перезагрузку

autostart ставит задачу планировщика (ensure каждые 10 мин, StartWhenAvailable). После reboot старый pid мёртв → ensure поднимает xray заново (при старте/в течение ~10 мин). ~/.sh-xray.json обновляется новым pid, все навыки снова ходят через прокси. Без autostart — поднимать вручную start.

Общий указатель ~/.xray-gate/state.json

{"http_proxy": "http://127.0.0.1:10811", "all_proxy": "socks5h://127.0.0.1:10810", "node": "...", "backend": "xray-gate"}

Потребители читают его и ходят через ОДИН egress (важно: один IP для логина И API, иначе Google убивает сессию). Всё хозяйство рантайма — под ~/.xray-gate/ (state.json/routing.json/byedpi/zapret/бинарь).

Потребление в проектах (egress «из коробки»)

xray-gate — источник пути (его знает он, не нейтральный librarykit-корень). Потребитель ставит его как egress-расширение и берёт прокси у его адаптеров. Установка (на PyPI НЕТ — из git):

uv add --optional egress "s-xray-gate @ git+https://gitlab.com/s-skills/s-xray-gate.git"  # запишет в pyproject+lock
uv sync --extra egress                                   # или: pip install git+https://gitlab.com/s-skills/s-xray-gate.git

4 способа взять прокси (нет указателя/шлюз не поднят → None → проект идёт напрямую):

import xray_gate.adapters as eg
httpx.Client(proxy=eg.httpx_proxy())                       # socks5h://127.0.0.1:10810
sess = eg.requests_session()                                # requests.Session с прокси
browser.launch(proxy=eg.playwright_proxy())                 # {"server":"socks5://..."}
TelegramClient(s, api_id, api_hash, proxy=eg.telethon_proxy())

# через нейтральный librarykit-транспорт (проект на китах):
from librarykit import HttpClient, HttpxTransport
HttpClient(HttpxTransport(proxy=eg.httpx_proxy()), auth, errmap)

# env-wide (subprocess/curl/любой ALL_PROXY-клиент):
from xray_gate import apply_to_env; apply_to_env("notebooklm")   # по карте ~/.xray-gate/routing.json

# zero-dep (без установки пакета — просто JSON):
import json, pathlib
proxy = json.loads((pathlib.Path.home()/".xray-gate"/"state.json").read_text())["all_proxy"]

Реальный пример-потребитель — bublictr (adapters/_common/browser.py): BUBLICTR_BROWSER_PROXY=shxrayxray_gate.adapters.playwright_proxy().

Портативность / другие устройства

install качает xray-core сам. add-sub <url> + test подберёт не-RU ноду. Так работает на любой машине/агенте.

Замечание по нодам

Качество зависит от подписки. Нестабильная нода → таймауты (xray ретраит, но лучше иметь несколько не-RU нод). status показывает live exit; test перевыбирает рабочую.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_xray_gate-0.2.2.tar.gz (67.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_xray_gate-0.2.2-py3-none-any.whl (56.3 kB view details)

Uploaded Python 3

File details

Details for the file s_xray_gate-0.2.2.tar.gz.

File metadata

  • Download URL: s_xray_gate-0.2.2.tar.gz
  • Upload date:
  • Size: 67.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_xray_gate-0.2.2.tar.gz
Algorithm Hash digest
SHA256 f5cf7228ec0d8181ec1c13de253e6981c3574a0ce1c1ffb153ce58e51be36ebc
MD5 3bb80f5a6b80e963e846ee5eee3335b6
BLAKE2b-256 f9e9361ce425924e6761d1c91aa0ce37003f6d9c20f49e41eda56ff00a71e428

See more details on using hashes here.

File details

Details for the file s_xray_gate-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: s_xray_gate-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 56.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for s_xray_gate-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0e1780ddc70fa21a94fd863edb737a122293415dfd8b4b5cd0b7f740beea8618
MD5 3dcf3eda93f2c1482e80bf9b6feff41b
BLAKE2b-256 764d18a4c32bb42a624fc130bc28b489ea0375aa8de1f3422ba17d16372be051

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page