diff --git a/CLAUDE.md b/CLAUDE.md index ea092ab..bede31d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,41 +1,112 @@ # CLAUDE.md — инструкции для Claude Code -## Текущая версия: 1.6.2 +## Основная цель проекта + +ServerManager создан чтобы **Claude Code мог управлять серверами через глобальный скилл `/ssh`**, зная только алиасы серверов. Claude **никогда не видит логины и пароли** — скрипт `ssh.py` сам читает credentials из зашифрованного `servers.json`. + +``` +Claude Code → /ssh investor "uptime" → ssh.py → servers.json (encrypted) → SSH + ↑ ↓ + Видит только alias + команду Пароли остаются локально Результат +``` + +## Как пользоваться /ssh + +```bash +# Выполнить команду на сервере +/ssh investor "uptime" +/ssh main-ovh "systemctl status nginx" + +# Список серверов (без паролей) +/ssh --list + +# Статус всех серверов +/ssh --status + +# Загрузить файл +/ssh investor --upload /local/file /remote/path + +# Скачать файл +/ssh investor --download /remote/file /local/path + +# Проверить доступность +/ssh investor --ping +``` + +## Как настроить на новой машине + +1. Клонировать: `git clone https://git.sensey24.ru/aibot777/server-manager.git` +2. `pip install -r requirements.txt` +3. `python main.py` → вкладка Setup → "Install Everything" +4. Добавить серверы через GUI → Claude Code сразу видит их через `/ssh --list` + +Setup устанавливает: +- `ssh.py` → `~/.server-connections/` +- `encryption.py` → `~/.server-connections/` +- `/ssh` skill → `~/.claude/commands/ssh.md` +- SSH-ключ (ed25519) ## Версионирование +**Автоматическое.** `build.py` сам инкрементирует patch-версию при каждой сборке. + +```bash +python build.py # автобамп 1.8.9 → 1.8.10, сборка +python build.py --no-bump # сборка без изменения версии +python build.py --clean # очистка артефактов + сборка +``` + Файл версии: `version.py` → `__version__` -Semver: **MAJOR** (ломающие изменения) | **MINOR** (новая фича) | **PATCH** (багфикс, мелкие правки) +Semver: **MAJOR** (ломающие) | **MINOR** (новая фича) | **PATCH** (багфикс — автобамп) -**ВАЖНО:** При любых изменениях в коде — ВСЕГДА бампить версию перед сборкой: -- Багфикс → `patch` -- Новая фича → `minor` -- Ломающие изменения → `major` +Для minor/major бампа — вручную изменить version.py перед сборкой. -**Порядок релиза:** -1. Внести изменения в код и закоммитить -2. `python release.py patch` (или `minor` / `major` / `2.0.0`) — **ОБЯЗАТЕЛЬНО перед сборкой** -3. `python build.py --clean` -4. Закоммитить изменения версии, поставить тег и запушить: - ```bash - git add version.py CHANGELOG.md README.md CLAUDE.md - git commit -m "vX.Y.Z: описание" - git tag vX.Y.Z - git push sensey master --tags - ``` +## Git — коммит и пуш -Скрипт `release.py` автоматически обновляет все 4 файла (`version.py`, `CHANGELOG.md`, `README.md`, `CLAUDE.md`) и генерирует changelog из git log. - -## Git — автокоммит и пуш - -**ОБЯЗАТЕЛЬНО:** После завершения любых изменений в коде — коммить и пуши в sensey: +**ОБЯЗАТЕЛЬНО:** После завершения изменений — коммить и пуши: ```bash git add <изменённые файлы> -git commit -m "описание" +git commit -m "vX.Y.Z: описание" git push sensey master ``` -- Не оставляй незакоммиченные изменения в конце сессии - Remote: `sensey` (https://git.sensey24.ru/aibot777/server-manager.git) - Ветка: `master` + +## Архитектура + +``` +ServerManager/ +├── main.py # Entry point +├── version.py # Version (auto-bumped by build.py) +├── build.py # PyInstaller + auto version bump +├── core/ # Business logic +│ ├── server_store.py # CRUD + encrypted JSON + backups +│ ├── encryption.py # Fernet encryption +│ ├── ssh_client.py # Paramiko SSH/SFTP/ShellSession +│ ├── session_pool.py # LRU session pool (max 5 concurrent) +│ ├── claude_setup.py # Claude Code integration installer +│ ├── status_checker.py # Background monitoring +│ ├── totp.py # TOTP/2FA (pyotp) +│ ├── i18n.py # EN/RU/ZH translations +│ └── logger.py # Rotating file logger +├── gui/ # CustomTkinter UI +│ ├── app.py # Main window +│ ├── sidebar.py # Server list + session indicators +│ ├── tabs/ # Terminal, Files, Info, Keys, 2FA, Setup +│ └── widgets/ # TerminalWidget (pyte), FileList, StatusBadge +├── tools/ # CLI tools (installed to ~/.server-connections/) +│ ├── ssh.py # SSH utility for Claude Code +│ └── skill-ssh.md # /ssh skill template +└── releases/ # Built executables +``` + +## Ключевые особенности терминала + +- **pyte** эмулятор + tkinter Text виджет +- **Session pool** — сессии живут при переключении серверов, буфер сохраняется через pickle +- **Auto-sudo** — детекция `[sudo] password for` в выводе, автоматическая отправка пароля +- **Ctrl+C** — double-press (1.5s) для SIGINT, single = copy (если есть выделение) +- **Keyboard layout independent** — Ctrl+C/V/D/L/Z работают через keycode, не зависят от раскладки +- **Copy/Paste** — Ctrl+C/Ctrl+Shift+C/правый клик для копирования, Ctrl+V для вставки (с bracketed paste)