7.8 KiB
CLAUDE.md
Проект
ServerManager — Desktop GUI (CustomTkinter) для управления удалёнными серверами любых типов. Claude Code управляет серверами через скилл /ssh, зная только алиасы.
Поддерживаемые типы серверов
| Тип | Клиент | GUI-табы | CLI-команды |
|---|---|---|---|
| ssh | ssh_client.py (Paramiko) |
Terminal, Files, Info, Keys, 2FA, Setup | ALIAS "cmd", --upload, --download |
| telnet | telnet_client.py (telnetlib3) |
Terminal, Info, Setup | — |
| mariadb/mssql/postgresql | sql_client.py (pymysql/pymssql/psycopg2) |
Query, Info, Setup | --sql, --sql-databases, --sql-tables |
| redis | redis_client.py (redis-py) |
Console, Info, Setup | --redis, --redis-info, --redis-keys |
| grafana | grafana_client.py (requests) |
Dashboards, Info, Setup | --grafana-dashboards, --grafana-alerts |
| prometheus | prometheus_client.py (requests) |
Metrics, Info, Setup | --prom-query, --prom-targets, --prom-alerts |
| winrm | winrm_client.py (pywinrm) |
PowerShell, Info, Setup | --ps, --cmd |
| rdp/vnc | remote_desktop.py |
Launch, Info, Setup | — (запуск внешнего клиента) |
БЕЗОПАСНОСТЬ
Claude НИКОГДА не видит: IP, логины, пароли, порты, TOTP-секреты. Всё в зашифрованном servers.json, скрипт ssh.py сам читает credentials.
ЗАПРЕЩЕНО: читать ~/.server-connections/ напрямую, использовать --list-full, добавлять credentials в контекст/логи.
Команды разработки
python main.py # Запуск
python build.py # Сборка exe (auto-bump patch)
python build.py --no-bump # Сборка без бампа
python build.py --clean # Очистка + сборка
pip install -r requirements.txt # Зависимости
Workflow — билд → тест → коммит → пуш
ОБЯЗАТЕЛЬНО после каждого изменения кода:
python build.py— собрать exe- Запустить exe из
releases/, убедиться что GUI работает - Коммит + пуш:
git add <файлы> version.py releases/ServerManager-vX.Y.Z-win-x64.exe git commit -m "vX.Y.Z: описание" git push sensey master
Старые exe в releases/ периодически чистить — оставлять первый + последние 5.
- Remote:
sensey, ветка:master
Версионирование
build.py автоинкрементирует patch в version.py. Semver: MAJOR (ломающие) | MINOR (фича) | PATCH (автобамп). Для minor/major — вручную изменить version.py перед build.py --no-bump.
Архитектура
core/ # Бизнес-логика
├── server_store.py # CRUD + encrypted JSON + observer + backups
├── encryption.py # Fernet
├── ssh_client.py # ShellSession + SFTPSession (Paramiko)
├── sql_client.py # MariaDB/MSSQL/PostgreSQL
├── redis_client.py # Redis (SCAN, авто-тип ключей)
├── grafana_client.py # Grafana REST API
├── prometheus_client.py # Prometheus REST API
├── telnet_client.py # Telnet (тот же интерфейс что ShellSession)
├── winrm_client.py # PowerShell/CMD через WinRM
├── remote_desktop.py # RDP/VNC (запуск внешнего клиента)
├── connection_factory.py # Фабрика: тип → клиент (lazy imports)
├── session_pool.py # LRU пул сессий (max 5)
├── status_checker.py # Фоновый мониторинг всех типов
├── i18n.py # EN/RU/ZH, ~300 ключей, t(key) API
├── claude_setup.py # Установщик интеграции Claude Code
├── totp.py # TOTP/2FA
└── logger.py # Rotating file logger
gui/
├── app.py # TAB_REGISTRY + TAB_CLASSES → условные табы по типу
├── sidebar.py # Список серверов + цветные бейджи типов
├── server_dialog.py # Адаптивная форма (поля по типу сервера)
├── tabs/
│ ├── terminal_tab.py # SSH + Telnet терминал (pyte)
│ ├── files_tab.py # SFTP файл-менеджер
│ ├── query_tab.py # SQL-редактор + Treeview + Export CSV
│ ├── redis_tab.py # Redis-консоль + история
│ ├── grafana_tab.py # Дашборды + алерты
│ ├── prometheus_tab.py # PromQL + targets
│ ├── powershell_tab.py # PS/CMD (WinRM)
│ ├── launch_tab.py # RDP/VNC кнопка Connect
│ ├── info_tab.py # Инфо (адаптивные поля по типу)
│ ├── keys_tab.py, totp_tab.py, setup_tab.py
│ └── ...
└── widgets/ # TerminalWidget, StatusBadge, FileList
tools/
├── ssh.py # CLI для Claude Code (все типы серверов)
└── skill-ssh.md # Шаблон скилла /ssh
Ключевые паттерны
- Duck typing — все клиенты реализуют
connect/disconnect/check_connectionпо соглашению, без ABC - Lazy imports — отсутствие pymysql/redis/etc не ломает приложение
- TAB_REGISTRY —
gui/app.pyперестраивает табы при смене типа сервера - Observer —
ServerStore→ UI обновляется автоматически - Session pool — SSH-сессии живут при переключении серверов
- Auto-sudo — детекция
[sudo] password for, автоотправка пароля - i18n — все строки через
t(key), 3 языка
Как пользоваться /ssh
# SSH
/ssh ALIAS "command" # Выполнить команду
/ssh ALIAS --upload local remote # SFTP upload
/ssh ALIAS --download remote local # SFTP download
# SQL
/ssh --sql ALIAS "SELECT * FROM t" # SQL-запрос
/ssh --sql-databases ALIAS # Список БД
/ssh --sql-tables ALIAS [db] # Список таблиц
# Redis
/ssh --redis ALIAS "GET key" # Redis-команда
/ssh --redis-info ALIAS # Redis INFO
/ssh --redis-keys ALIAS "pattern" # SCAN ключей
# Grafana / Prometheus
/ssh --grafana-dashboards ALIAS # Дашборды
/ssh --prom-query ALIAS "up" # PromQL
/ssh --prom-targets ALIAS # Targets
# WinRM
/ssh --ps ALIAS "Get-Process" # PowerShell
/ssh --cmd ALIAS "dir" # CMD
# Общие
/ssh --list # Все серверы
/ssh --info ALIAS # Инфо (без creds)
/ssh --status # Online/offline
Конфигурация
- Серверы:
~/.server-connections/servers.json(Fernet-encrypted) - Настройки:
~/.server-connections/settings.json - Бэкапы:
~/.server-connections/backups/
Дополнительная документация
Читай по необходимости: README.md, CHANGELOG.md, TERMINAL_AUDIT.md, plans/, tools/skill-ssh.md.