diff --git a/memory/ontology/graph.jsonl b/memory/ontology/graph.jsonl index 6b9fb5e..1199707 100644 --- a/memory/ontology/graph.jsonl +++ b/memory/ontology/graph.jsonl @@ -136,3 +136,6 @@ {"op": "delete", "id": "proj_home_assistant", "timestamp": "2026-04-18T14:44:22.703342+00:00"} {"op": "create", "entity": {"id": "proj_ha_availability_dashboard", "type": "Project", "properties": {"name": "HA Availability Dashboard", "status": "active", "description": "Дашборд доступности устройств в Home Assistant", "folder": "tasks/ha-availability-dashboard/", "doc_path": "tasks/ha-availability-dashboard/PROJECT.md"}, "created": "2026-04-18T14:46:16.652373+00:00"}, "timestamp": "2026-04-18T14:46:16.652373+00:00"} {"op": "create", "entity": {"id": "task_ha_availability_dashboard_setup", "type": "Task", "properties": {"title": "Привести HA Availability Dashboard к стандарту проекта", "status": "active", "project": "proj_ha_availability_dashboard", "folder": "tasks/ha-availability-dashboard/TASKS/active/setup/", "doc_path": "tasks/ha-availability-dashboard/TASKS/active/setup/TASK.md"}, "created": "2026-04-18T14:46:16.652373+00:00"}, "timestamp": "2026-04-18T14:46:16.652373+00:00"} +{"op": "delete", "id": "proj_mtproxy", "timestamp": "2026-04-18T14:51:47.300166+00:00"} +{"op": "delete", "id": "task_mtproxy_setup", "timestamp": "2026-04-18T14:51:47.300166+00:00"} +{"op": "delete", "id": "proj_ruvpn_xray", "timestamp": "2026-04-18T14:57:49.775527+00:00"} diff --git a/tasks/mtproxy/happ-telegram-route.json b/tasks/mtproxy/happ-telegram-route.json deleted file mode 100644 index f9a8ec7..0000000 --- a/tasks/mtproxy/happ-telegram-route.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "log": { - "loglevel": "warning" - }, - "inbounds": [ - { - "tag": "socks-in", - "protocol": "socks", - "listen": "127.0.0.1", - "port": 10808, - "settings": { - "auth": "noauth", - "udp": true - } - }, - { - "tag": "http-in", - "protocol": "http", - "listen": "127.0.0.1", - "port": 10809, - "settings": {} - } - ], - "outbounds": [ - { - "tag": "proxy", - "protocol": "vless", - "settings": { - "vnext": [ - { - "address": "185.130.212.192", - "port": 443, - "users": [ - { - "id": "d3a2fae8-d703-4b2f-8d94-afb016d57640", - "encryption": "none", - "flow": "xtls-rprx-vision" - } - ] - } - ] - }, - "streamSettings": { - "network": "tcp", - "security": "reality", - "realitySettings": { - "serverName": "www.microsoft.com", - "fingerprint": "chrome", - "publicKey": "3jY3vI6MUTEn3X20u7xDjpxrF2wO6zUxiXgP-Aie7yQ", - "shortId": "a1b2c3d4", - "spiderX": "" - } - } - }, - { - "tag": "direct", - "protocol": "freedom", - "settings": {} - }, - { - "tag": "block", - "protocol": "blackhole", - "settings": {} - } - ], - "routing": { - "domainStrategy": "IPIfNonMatch", - "rules": [ - { - "type": "field", - "outboundTag": "proxy", - "domain": [ - "telegram.org", - "t.me", - "core.telegram.org" - ] - }, - { - "type": "field", - "outboundTag": "proxy", - "ip": [ - "149.154.160.0/20", - "91.108.4.0/22", - "91.108.8.0/22", - "91.108.56.0/22", - "95.161.64.0/20" - ] - }, - { - "type": "field", - "outboundTag": "direct", - "network": "tcp,udp" - } - ] - } -} diff --git a/tasks/mtproxy/remove_mtproxy.sh b/tasks/mtproxy/remove_mtproxy.sh deleted file mode 100755 index 6f7b817..0000000 --- a/tasks/mtproxy/remove_mtproxy.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -echo "Останавливаю контейнер mtproto-proxy..." -sudo docker stop mtproto-proxy || true - -echo "Удаляю контейнер mtproto-proxy..." -sudo docker rm mtproto-proxy || true - -echo "Удаляю образ nineseconds/mtg:2..." -sudo docker rmi nineseconds/mtg:2 || true - -echo "Удаляю конфиг mtg.toml..." -[ -f mtg.toml ] && rm mtg.toml || true - -echo "MTProxy удалён." diff --git a/tasks/mtproxy/setup_mtproxy.sh b/tasks/mtproxy/setup_mtproxy.sh deleted file mode 100755 index 8a56193..0000000 --- a/tasks/mtproxy/setup_mtproxy.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -set -e - -# ============================================================ -# MTProxy (Fake TLS) setup script for Telegram -# Uses: nineseconds/mtg:2 Docker image -# Port: 9443 (proxy), 8889 (stats) -# ============================================================ - -echo "==> [1/6] Проверка и установка Docker..." -if ! command -v docker &>/dev/null; then - echo " Docker не найден. Устанавливаем..." - curl -fsSL https://get.docker.com | sudo sh - sudo systemctl enable --now docker - echo " Docker установлен и запущен." -else - echo " Docker уже установлен: $(docker --version)" -fi - -echo "" -echo "==> [2/6] Генерация секрета (Fake TLS, домен: www.google.com)..." -SECRET=$(sudo docker run --rm nineseconds/mtg:2 generate-secret --hex www.google.com) -echo " Секрет сгенерирован: $SECRET" - -echo "" -echo "==> [3/6] Создание конфига mtg.toml..." -printf 'secret = "%s"\nbind-to = "0.0.0.0:3128"\nfake_tls_domain_check = false\n' "$SECRET" > mtg.toml -echo " Файл mtg.toml создан:" -cat mtg.toml - -echo "" -echo "==> [4/6] Остановка и удаление старого контейнера (если есть)..." -sudo docker stop mtproto-proxy 2>/dev/null || true -sudo docker rm mtproto-proxy 2>/dev/null || true -echo " Готово (или контейнера не было — это нормально)." - -echo "" -echo "==> [5/6] Запуск нового контейнера mtproto-proxy..." -sudo docker run -d \ - --name=mtproto-proxy \ - --restart=always \ - -p 9443:3128 \ - -p 8889:3129 \ - -v "$(pwd)/mtg.toml:/config.toml:ro" \ - nineseconds/mtg:2 -echo " Контейнер запущен." - -echo "" -echo "==> [6/6] Формирование ссылки для подключения..." -SERVER_IP=$(curl -fsSL https://ifconfig.me 2>/dev/null || hostname -I | awk '{print $1}') -SECRET_B64=$(echo -n "$SECRET" | xxd -r -p | base64 | tr '+/' '-_' | tr -d '=') -TG_LINK="tg://proxy?server=${SERVER_IP}&port=9443&secret=${SECRET_B64}" - -echo "" -echo "============================================================" -echo " MTProxy успешно развёрнут!" -echo "------------------------------------------------------------" -echo " Сервер : $SERVER_IP" -echo " Порт : 9443" -echo " Секрет : $SECRET" -echo "" -echo " Ссылка для Telegram:" -echo " $TG_LINK" -echo "" -echo " Также можно открыть в браузере (заменит tg:// на https://):" -echo " https://t.me/proxy?server=${SERVER_IP}&port=9443&secret=${SECRET_B64}" -echo "============================================================" diff --git a/tasks/ruvpn-xray/setup_vless.py b/tasks/ruvpn-xray/setup_vless.py deleted file mode 100644 index 433d9a0..0000000 --- a/tasks/ruvpn-xray/setup_vless.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 -""" -Настройка VLESS Reality inbound на ruvpn (185.130.212.192) через 3x-ui API -""" -import requests -import json -import urllib3 - -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - -BASE_URL = "https://185.130.212.192:37615" -WEB_BASE_PATH = "/Tlvziqv5coI64Ymq5U/" -USERNAME = "admin" -PASSWORD = "XrayAdmin2026!" - -# Генерация UUID и ключей Reality -import uuid -import subprocess - -UUID = str(uuid.uuid4()) -print(f"UUID: {UUID}") - -# Генерация пары ключей Reality через xray -result = subprocess.run( - ["docker", "run", "--rm", "teddysun/xray", "xray", "x25519"], - capture_output=True, - text=True, - timeout=30 -) - -if result.returncode == 0: - lines = result.stdout.strip().split('\n') - PRIVATE_KEY = lines[0].split(': ')[1] if ': ' in lines[0] else lines[0] - PUBLIC_KEY = lines[1].split(': ')[1] if len(lines) > 1 and ': ' in lines[1] else "" - print(f"Private Key: {PRIVATE_KEY}") - print(f"Public Key: {PUBLIC_KEY}") -else: - # Fallback: используем статичные тестовые ключи (в продакшене сгенерировать!) - PRIVATE_KEY = "test-private-key-replace-me" - PUBLIC_KEY = "test-public-key-replace-me" - print("WARNING: Could not generate keys, using placeholders") - -SHORT_ID = uuid.uuid4().hex[:16] -print(f"Short ID: {SHORT_ID}") - -# Сессия для API -session = requests.Session() -session.verify = False - -# Логин -login_url = f"{BASE_URL}{WEB_BASE_PATH}login" -login_data = { - "username": USERNAME, - "password": PASSWORD -} - -print(f"\n=== Логин в 3x-ui ===") -response = session.post(login_url, json=login_data) -print(f"Login status: {response.status_code}") -print(f"Login response: {response.text[:200]}") - -if response.status_code != 200 or "success" not in response.text.lower(): - print("ERROR: Login failed!") - exit(1) - -# Добавление VLESS Reality inbound -print(f"\n=== Добавление VLESS Reality inbound ===") - -inbound_config = { - "id": 0, # 0 = новый inbound - "up": 0, - "down": 0, - "total": 0, - "remark": "VLESS-Reality-Slava", - "enable": True, - "expiryTime": 0, - "listen": "0.0.0.0", - "port": 53903, - "protocol": "vless", - "settings": json.dumps({ - "clients": [ - { - "id": UUID, - "flow": "xtls-rprx-vision", - "email": "slava@android", - "limitIp": 0, - "totalGB": 0, - "expiryTime": 0, - "enable": True, - "tgId": "", - "subId": "" - } - ], - "decryption": "none", - "fallbacks": [] - }), - "streamSettings": json.dumps({ - "network": "tcp", - "security": "reality", - "externalProxy": [], - "realitySettings": { - "show": False, - "xver": 0, - "dest": "yahoo.com:443", - "serverNames": ["yahoo.com"], - "privateKey": PRIVATE_KEY, - "minClientVersion": "", - "maxClientVersion": "", - "maxTimeDiff": 0, - "shortIds": [SHORT_ID] - }, - "sockopt": { - "acceptProxyProtocol": False, - "tcpFastOpen": True - } - }), - "tag": f"VLESS_Reality_{UUID[:8]}" -} - -add_url = f"{BASE_URL}{WEB_BASE_PATH}panel/api/inbounds/add" -response = session.post(add_url, json=inbound_config) -print(f"Add inbound status: {response.status_code}") -print(f"Response: {response.text[:500]}") - -if response.status_code == 200: - print("\n✅ VLESS Reality inbound успешно добавлен!") - print(f"\n📱 Конфиг для Android (v2raytun/happ):") - print(f""" -vless://{UUID}@185.130.212.192:53903?encryption=none&flow=xtls-rprx-vision&security=reality&fp=chrome&sni=yahoo.com&pbk={PUBLIC_KEY}&sid={SHORT_ID}&type=tcp#VLESS-Reality-Slava - """) -else: - print(f"\n❌ Ошибка добавления inbound") - print(f"Response: {response.text}") diff --git a/tasks/ruvpn-xray/test_api.py b/tasks/ruvpn-xray/test_api.py deleted file mode 100644 index 0eaa2ca..0000000 --- a/tasks/ruvpn-xray/test_api.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python3 -""" -Восстановление SSH доступа к ruvpn через 3x-ui API -Логинимся и пробуем выполнить команду через API (если доступно) -или добавляем правило firewall через systemd -""" -import requests -import json -import urllib3 - -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - -BASE_URL = "https://185.130.212.192:37615" -WEB_BASE_PATH = "/Tlvziqv5coI64Ymq5U/" -USERNAME = "admin" -PASSWORD = "XrayAdmin2026!" - -session = requests.Session() -session.verify = False - -# Логин -login_url = f"{BASE_URL}{WEB_BASE_PATH}login" -login_data = {"username": USERNAME, "password": PASSWORD} - -print(f"=== Логин в 3x-ui ===") -response = session.post(login_url, json=login_data) -print(f"Status: {response.status_code}") - -if response.status_code == 200: - try: - data = response.json() - print(f"Response: {json.dumps(data, indent=2)[:500]}") - if data.get("success"): - print("✅ Логин успешен!") - else: - print("❌ Логин не удался") - except: - print(f"Response text: {response.text[:300]}") -else: - print(f"❌ HTTP {response.status_code}") - -# Проверяем доступные API endpoints -print(f"\n=== Проверка API endpoints ===") -endpoints = [ - "panel/api/inbounds/list", - "panel/api/settings", - "server/status", -] - -for endpoint in endpoints: - url = f"{BASE_URL}{WEB_BASE_PATH}{endpoint}" - try: - resp = session.get(url, timeout=5) - print(f"{endpoint}: {resp.status_code} - {resp.text[:100]}") - except Exception as e: - print(f"{endpoint}: ERROR - {e}")