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.1.tar.gz (67.5 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.1-py3-none-any.whl (56.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: s_xray_gate-0.2.1.tar.gz
  • Upload date:
  • Size: 67.5 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.1.tar.gz
Algorithm Hash digest
SHA256 7a6a616500815f25751e5f25393b4859daf8d7e8ecd05b49a1095e390c71610e
MD5 3151e956dfecc937cccabb584f85f703
BLAKE2b-256 373539d65922a2a4682f364ceb9c45e93afca437a6ef0c86db71c33f7ff99181

See more details on using hashes here.

File details

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

File metadata

  • Download URL: s_xray_gate-0.2.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dd2be19ac7cc174cdc0769f22e76b1dea552a91fb3ffbefc8a8cd52d9d4519fe
MD5 d58cbfa182448a2a7587a7114ff322f1
BLAKE2b-256 15737d626d8b856c0a6406224cdc2272532e20b73669b75ed6807312140aba0a

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