feat(xray-proxy): добавлен управляемый прокси для CLI

Зачем:
- отделить переносимый прокси-интерфейс от общих Bash-функций
- запускать агентские CLI через явный внешний или управляемый прокси

Что:
- добавлен stow-пакет xray-proxy с CLI, Bash-модулем и примерами
- реализованы строгий разбор VLESS и управляемый запуск Xray
- добавлены проверки процесса, порта, сигналов и отсутствия утечек
- сохранены спецификация и очередь следующих тикетов

Проверка:
- python3 tests/test_xray_proxy.py — 22/22
- python3 tests/test_xray_proxy_managed.py — 16/16
- bash tests/test_proxy_launchers.sh — 9/9
- bash tests/test_install.sh
- bash -n, Python 3.8 grammar, git diff --check
This commit is contained in:
ddadmin committed 2026-07-20 00:00:59 +03:00
1 parent fdf744e578
commit e69a4bb7df
20 files changed
+3224 -170

No files matched your search

+16 -7
View File
@@ -47,7 +47,8 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
| Пакет | Что делает |
|-------|------------|
| `bash` | Кастомный prompt, функции (`proxy_on/off`, `myip`), подгрузка секретов |
| `bash` | Кастомный prompt, общие функции, подгрузка секретов |
| `xray-proxy` | Переносимый CLI и Bash-команды для явного запуска через прокси |
| `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` |
| `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` |
| `zed` | Конфигурация Zed редактора |
@@ -94,9 +95,17 @@ export ZAI_API_KEY="..." # https://z.ai
Файл подгружается при старте bash и VS Code Server. Не трекается в git.
### Прокси (`hproxy.local`)
### Прокси (`xray-proxy`)
Имя `hproxy.local` — алиас хоста с прокси. Все инструменты (bash, pwsh, VS Code Server) используют его для `proxy_on/off`, не завязываясь на конкретный IP.
Linux/Bash-команды `proxy_on/off`, `pclaude`, `pcodex` и `myip` находятся в
самостоятельном пакете [`xray-proxy`](xray-proxy/README.md). Он читает строгий
машинный INI, проверяет доступность явно выбранного внешнего прокси и не
запускает команду при ошибке. Без конфига сохраняется внешний Hiddify
`hproxy.local:12334`. Управление процессом Xray будет добавлено отдельно;
`type = xray` пока даёт безопасный отказ.
Имя `hproxy.local` — прежний алиас хоста с внешним прокси. Windows и VS Code
Server продолжают использовать его напрямую.
**Порты:** HTTP/HTTPS — `hproxy.local:12334`, SOCKS5 — `socks5://hproxy.local:12334`.
@@ -135,7 +144,7 @@ echo '127.0.0.1 hproxy.local' | sudo tee -a /etc/hosts
**Windows pwsh** — `proxy_on` / `proxy_off` / `myip` работают аналогично bash-версиям.
**`pclaude` / `pcodex`** — явный запуск Claude/Codex CLI через прокси (bash и pwsh). Перед стартом делают fail-fast проверку доступности `hproxy.local:12334` (таймаут — `PROXY_PREFLIGHT_TIMEOUT`, дефолт 2 c); если прокси недоступен — не запускают и возвращают ненулевой код. Proxy-переменные видны только дочернему процессу и не остаются в сессии. Голые `claude`/`codex` не перекрываются и идут напрямую — для прокси нужен явный `p`-префикс.
**`pclaude` / `pcodex`** — явный запуск Claude/Codex CLI через прокси (bash и pwsh). Bash-версия делегирует проверку и запуск `xray-proxy run`; Windows-версия сохраняет прежний адрес `hproxy.local:12334`. Таймаут — `PROXY_PREFLIGHT_TIMEOUT`, по умолчанию 2 c. Если прокси недоступен, клиент не запускается. Proxy-переменные видны только дочернему процессу и не остаются в сессии. Голые `claude`/`codex` не перекрываются и идут напрямую — для прокси нужен явный `p`-префикс.
**Codex GUI на Windows** — chezmoi создает Start Menu ярлык `Codex Proxy`, который запускает Codex Windows App с proxy-переменными:
@@ -178,15 +187,15 @@ NO_PROXY=hproxy.local,localhost,127.0.0.1,::1,[::1],.concept-software.ru
## 📖 Справочник
### Bash-функции (`~/.bash_functions`)
### Bash-функции (`~/.config/xray-proxy/shell.bash`)
| Функция | Описание |
|---------|----------|
| `proxy_on` | Включает HTTP/HTTPS/SOCKS5 прокси через `hproxy.local:12334` |
| `proxy_on` | Проверяет настроенный прокси и атомарно включает восемь переменных |
| `proxy_off` | Очищает proxy-переменные |
| `pclaude` / `pcodex` | Запуск Claude/Codex CLI через прокси с fail-fast pre-flight |
| `myip` | Показывает текущий внешний IP |
| `update_hproxy` | Обновляет `hproxy.local` в `/etc/hosts` через `setup-hproxy.sh` (WSL NAT) |
| `update_hproxy` | Остаётся в `~/.bash_functions` и обновляет WSL NAT-алиас |
### PowerShell-функции (`~/.config/powershell/profile.ps1`)