Previous BAT script falsely reported success because `if exist` checked
the pre-existing file, not the copy result. Now: deletes old DST first,
copies with /B (binary), verifies size matches expected, logs all errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Groups CRUD in sidebar (create, rename, change color, reorder, delete)
- Collapsible group headers with color dots and server count
- "Move to Group" context menu on servers
- Group dropdown in ServerDialog (add/edit)
- 17 i18n keys (EN/RU/ZH)
- Search auto-expands groups
- Cleaned up old release binaries
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pyte 0.8.2 doesn't handle DCS string sequences (ESC P ... ST). When
nano/ncurses sends DECRQSS queries, pyte consumed the introducer but
rendered the payload as visible text. Added regex pre-filter to strip
DCS/APC/PM/SOS sequences before feeding data to pyte.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Installs ssh.py, encryption.py, Claude Code skill, Python dependencies.
Supports local source dir or downloads from Gitea.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
VBS→PowerShell chain was silently failing. BAT is simpler, doesn't depend
on execution policy, and writes detailed log to %TEMP%\sm_update.log
for debugging.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ctrl+key shortcuts now use physical keycodes as fallback, so Ctrl+S (save
in nano), Ctrl+Q (XON), Ctrl+A/E/R/W/T etc. work regardless of whether
the keyboard layout is English, Russian, or any other.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prevents stale ~/.server-connections/ssh.py after code changes.
Every build now auto-copies tools/ssh.py, core/encryption.py
and tools/skill-ssh.md to their shared locations.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CLI (ssh.py): chunked resume upload for files >10MB with .part atomic rename
- CLI: SHA256 verification (sha256sum on Linux, Get-FileHash on Windows)
- CLI: adaptive retry count based on file size (up to 30 for large files)
- CLI: SSH keepalive 15s + window_size 4MB for stable transfers
- CLI: path injection fix in SHA256 shell commands
- CLI: Windows SFTP path fix for PowerShell Get-FileHash
- GUI (ssh_client.py): chunked upload with resume in SFTPSession
- GUI: retry up to 3 attempts with SHA256 readback in SSHClientWrapper
- GUI: keepalive 15s + window_size 4MB in both auth paths
- Tested: 5MB, 15MB, 200MB uploads to Windows SSH server (116)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- main.py: wrap _ensure_display_access() in sys.platform != "win32" check
- main.py: add FileNotFoundError to except in _find_active_xauthority()
- claude_setup.py: platform-aware error message for ssh-keygen not found
- CLAUDE.md: add mandatory cross-platform rules for all contributors
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Automatically finds active display from X11 sockets and processes,
locates .Xauthority from display owner in /home/*, and merges
xauth cookies so root can use another user's X session.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Support for all server types: ssh, telnet, mariadb, mssql, postgresql, redis, grafana, prometheus, winrm, rdp
- Add --type, --database, --token options to --add command
- Add server type validation
- Add type-specific fields (database, token, auth_method)
- Update skill-ssh.md with new usage
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Uses <!-- server-manager:start/end --> markers to safely add or replace
the server-manager section. Re-running install_all() updates the block
without creating duplicates.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>