Skip to main content

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

Один общий SOCKS5-прокси (xray-core) с НЕ-российской нодой и smart-routing (РУ/CN → напрямую, остальное → за рубеж). Пишет общий указатель ~/.xray-gate/state.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]   # поднять + записать ~/.xray-gate/state.json (порт по умолч. 10810)
xray-gate status             # alive + live exit country
xray-gate stop
xray-gate ensure             # self-heal: поднять, если процесс умер (после reboot/краша)
xray-gate onboard            # детект окружения (прокси/движки) + per-service карта routing.json
xray-gate ensure-reachable <service|--url URL>   # оркестратор доступности (см. ниже); exit 0/3/1
xray-gate autostart          # Windows Task Scheduler: ensure каждые 10 мин (переживает reboot)
xray-gate autostart --remove
xray-gate add-sub <url>      # своя VLESS-подписка (vless/base64; авто-обновление по интервалу подписки)

Оркестратор доступности ensure_reachable (единая точка встраивания)

Одна функция вместо ручной цепочки probe→detect→byedpi→Gateway — для встраивания gate в КАЖДЫЙ сервис-навык на установке/старте. Проверяет доступность цели и эскалирует: существующий egress (системный прокси + скан локальных прокси-портов Hiddify/v2rayN/clash/…

  • уже поднятые движки) → byedpi (РКН-DPI, sni-dpi) → xray-демон+подписка (гео/тупик).
from xray_gate import ensure_reachable
res = ensure_reachable("notebooklm")            # или ensure_reachable(url="https://…/", ok_codes=(200,302))
if res.ok:                     proxy = res.proxy            # None → напрямую; иначе socks5h/http
elif res.need_subscription:    ...              # агент просит подписку → xray-gate add-sub <url> (пакет НЕ падает)
else:                          ...              # тупик: res.detail / res.tried

ReachResult: ok, engine ("direct|system|byedpi|xray"), proxy, need_subscription, block_kind, detail, tried (лог попыток). Предикаты has_subscription() / subscription_configured() — есть ли рабочая подписка/нода (вместо sys.exit). CLI: xray-gate ensure-reachable <service|--url URL> [--no-byedpi] [--no-xray] (exit 0 — доступно, 3 — нужна подписка, 1 — тупик). Без установки китов (свежая машина, 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 — атомарную запись общих указателей (~/.xray-gate/state.json, ~/.xray-gate/routing.json). Ядро-движок (xray_gate/_core.py, бывший top-level gateway.py) намеренно остаётся на чистом stdlib — у обоих kit-обращений есть stdlib-фолбэк, поэтому self-heal работает даже без китов. gateway-роутер потребляет egress sh-xray через свой ProxyProvider (читает ~/.xray-gate/state.json).

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

autostart ставит задачу планировщика (ensure каждые 10 мин, StartWhenAvailable). После reboot старый pid мёртв → ensure поднимает xray заново (при старте/в течение ~10 мин). ~/.xray-gate/state.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=shxray → xray_gate.adapters.playwright_proxy().

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

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

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

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

Metadata

Release files for s-xray-gate 0.3.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for s-xray-gate 0.3.5
File Size Uploaded
s_xray_gate-0.3.5.tar.gz 99.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for s-xray-gate 0.3.5
File Interpreter ABI Platform
s_xray_gate-0.3.5-py3-none-any.whl Python 3 none any Details

Total release size: 184.4 kB

Release files / s_xray_gate-0.3.5.tar.gz

Download URL s_xray_gate-0.3.5.tar.gz
Size 99.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4841f413e61bdba02cbb50c91b29d26341bb06f285317ef9a333c3d82fcd3778
BLAKE2b-256 checksum
How to use checksums
0ee0a6e38173745bf40eec631e564bcab43fcd400f4f21dbfb1267a81c3748e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / s_xray_gate-0.3.5-py3-none-any.whl

Download URL s_xray_gate-0.3.5-py3-none-any.whl
Size 84.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dac44ae81b7ab540621a2cd5263fdc52fe9c87cdf0c8e7501702d1b57841f17a
BLAKE2b-256 checksum
How to use checksums
ca54b38b271ac347f6b5b216f7d252992728355ca217222a84c23f86409f0626
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

This release

0.3.5 This release

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page