Commit Graph

39 Commits

Author SHA1 Message Date
chrome-storm-c442
4a6464ede9 v1.8.57: auto-size result columns + working horizontal scrollbar
- Measure column widths from header and data (sample up to 100 rows)
- Clamp width: min 60px, max 400px per column
- Set stretch=False so columns don't compress to fit viewport
- Horizontal scrollbar now works when total column width exceeds view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 04:53:32 -05:00
chrome-storm-c442
6f0bfe39f1 v1.8.56: Database Tree Explorer + thread-safe SQL operations
- Add HeidiSQL-style database tree panel (Databases → Tables → Columns)
- Lazy loading with ttk.Treeview, context menus, double-click SELECT TOP 1000
- Fix pymysql thread safety: serialize all DB ops with threading.Lock
- Use lock.acquire(timeout=10) to prevent deadlocks between tree and query threads
- Always reset _executing flag in finally block to prevent stuck queries
- Add _ensure_connected() auto-reconnect on broken connections
- Add sql_client check_connection() null safety
- Add 12 tree-related i18n keys (EN/RU/ZH)
- Clean up old releases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 04:18:45 -05:00
chrome-storm-c442
ac7e174e41 v1.8.53: fix Redis and MariaDB GUI tabs — wrong client API calls
- redis_tab: fix RedisClient constructor (pass server dict, not alias+store)
- redis_tab: add connect() call, add disconnect on server switch
- redis_tab: remove non-existent db= parameter from execute(), use select_db()
- redis_client: add select_db() method for runtime DB switching
- query_tab: fix use_database() → switch_database(), close() → disconnect()
- query_tab: fix execute() → execute_query() with dict unpacking
- query_tab: add missing connect() call after SQLClient creation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 03:28:12 -05:00
chrome-storm-c442
4959004a3f v1.8.52: icons module, Windows SSH sanitization, embedded RDP improvements, UI polish
- Add core/icons.py — centralized icon text helper with emoji/symbol support
- Add Windows SSH command sanitization in ssh.py (Linux→Windows auto-translation)
- Improve embedded RDP: launch tab connect/disconnect, fullscreen toggle
- Refactor sidebar: cleaner server type badges
- Update server_dialog: adaptive fields per server type
- Add setup_openssh.bat tool
- Update skill-ssh.md and CLAUDE.md docs for Windows SSH support
- Cleanup old releases, add v1.8.48-v1.8.52

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:37:37 -05:00
chrome-storm-c442
142b68515c v1.8.36: fix fullscreen toggle — _is_detached flag prevents re-embed conflict
- Added _is_detached flag to EmbeddedRDP (set in detach(), cleared in reattach())
- _monitor_tick() skips try_reembed() when window is intentionally detached
- Prevents race condition: monitor tick no longer re-embeds fullscreen window
- Added plans/test-rdp.md — RDP testing documentation
- build.py auto-cleanup removed v1.8.31

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:59:16 -05:00
chrome-storm-c442
68f2d7eae8 v1.8.35: fix embedded RDP auto-recovery on reconnect + release cleanup
- try_reembed() now handles same-HWND reparent scenario (mstsc reconnect resets parent)
- is_embedded() checks GetParent(hwnd) == parent_hwnd every 500ms
- _monitor_tick() two-stage: is_alive() for process death, is_embedded() for window loss
- build.py auto-cleans old releases (keep first + last 5)
- Cleaned old releases from git

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:45:05 -05:00
chrome-storm-c442
68e94856f6 v1.8.32: fix embedded RDP — AttachThreadInput for cross-process SetParent
SetParent returned 0 (failed) because mstsc runs in a different thread.
Added AttachThreadInput() before SetParent to link input queues.
Also strip WS_EX_APPWINDOW to remove mstsc from taskbar when embedded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:07:49 -05:00
chrome-storm-c442
91bc1c0345 v1.8.31: fix SetWindowLongW overflow — unsigned 32-bit style mask
GetWindowLongW returns signed int; bitwise ops with WS_POPUP (0x80000000)
overflow ctypes c_long. Fixed with & 0xFFFFFFFF mask + ctypes.c_long() cast.
Also tightened window class filter: pid_match now requires known mstsc class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:02:58 -05:00
chrome-storm-c442
82e64b5fad v1.8.29: fix embedded RDP — multi-strategy window finding + cert suppression
- Replace PID-only matching with psutil child tracking + hostname title matching
- Add _trust_rdp_server() to pre-trust certificate via registry
- Two-phase embed: dialog first, then re-embed main TscShellContainerClass
- Fix disconnect/is_alive to handle mstsc child processes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:42:19 -05:00
chrome-storm-c442
4e9012e2ab v1.8.26: right-click context menu on sidebar servers
Type-adaptive menu: SSH (terminal/files/keys), SQL (query editor),
Redis (console), Grafana/Prometheus (open browser), WinRM (PowerShell),
RDP/VNC (connect). Universal: check status, copy alias, edit, delete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:00:00 -05:00
chrome-storm-c442
1b3fb30680 v1.8.25: update CLAUDE.md — full multi-type architecture docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:44:24 -05:00
chrome-storm-c442
fc33c18881 v1.8.24: build with multi-type server support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:38:17 -05:00
chrome-storm-c442
5cf856069b v1.8.23: fix Ctrl+V/C/X/A/Z for non-Latin keyboard layouts, add Entry undo/redo
- Global keycode-based handler for Ctrl shortcuts (works with Russian, Chinese, any layout)
- Tkinter maps <<Paste>> to <Control-v> by keysym which fails on non-Latin layouts
- New handler intercepts <Control-Key> at 'all' level, checks keycodes and generates correct virtual events
- Added Undo/Redo support for Entry widgets (tk.Entry has no built-in undo)
- Tab switch focus management: terminal releases focus when switching away

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:13:27 -05:00
chrome-storm-c442
a8f3bd04e1 v1.8.17: revert broken undo, keep only alias-edit feature
Fully reverted sidebar, files_tab, totp_tab, server_dialog to v1.8.10
base. Removed all entry_undo bindings that broke Ctrl+V paste globally.
Only alias editing feature preserved (editable alias + rename support).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:45:53 -05:00
chrome-storm-c442
5d55d41f34 v1.8.13: fix entry_undo Cyrillic bind crash
tkinter rejects Cyrillic chars in bind(). Use keycode-based
<Control-Key> dispatch instead (same approach as terminal_widget).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:30:13 -05:00
chrome-storm-c442
afffc4177e v1.8.12: fix Ctrl+Z undo — manual implementation for tk.Entry
tk.Entry has no built-in undo (unlike tk.Text), so _entry.config(undo=True)
crashed. Replaced with custom entry_undo.py that tracks history manually
and binds Ctrl+Z/Ctrl+Y (+ Russian layout support).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:28:56 -05:00
chrome-storm-c442
0554d8782f v1.8.11: editable alias + Ctrl+Z undo for all input fields
- Alias field now editable when editing server profile
- Duplicate alias validation, session pool migration on rename
- Ctrl+Z undo enabled on all CTkEntry widgets (11 fields)
- Audit plan added to plans/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:21:13 -05:00
chrome-storm-c442
efb508c982 v1.8.10: security audit fixes
- --list and --status no longer expose IP/port/user (only aliases)
- --list-full for admin use (not in skill)
- Removed --add from /ssh skill (servers added via GUI only)
- Removed exact file paths from skill template
- Added deny-read rules for ~/.server-connections/ files
- Wrapped main() in try/except to prevent traceback leaking
- Added needs_reencrypt() to encryption.py for future migration
- install_key no longer prints server IP

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:56:16 -05:00
chrome-storm-c442
c778e2bdba v1.8.8: auto-version bump + keycode-based Ctrl+key dispatch
- build.py auto-increments patch version on every build (--no-bump to skip)
- Ctrl+C/V/D/L/Z routed by physical keycode, works with any keyboard layout
- No more manual version bumping needed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:23:22 -05:00
chrome-storm-c442
11ea811c4f v1.8.7: robust sudo auto-password + debug status
- Strip ANSI escapes before sudo prompt detection
- Normalize \r\n/\r line endings for reliable matching
- 300ms delay before sending password (PTY settle time)
- Status bar feedback: "sudo: password sent automatically"
- Encode password explicitly as UTF-8

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:14:55 -05:00
chrome-storm-c442
c597fe9e5d v1.8.6: fix sudo detection, terminal copy/paste
- Tighten sudo auto-password to only match "[sudo] password for" in last line (fixes journalctl hang)
- Remove state="disabled" from terminal widget (fixes copy/paste on Windows)
- Copy: Ctrl+C (with selection), Ctrl+Shift+C, right-click menu
- Paste: Ctrl+V, Ctrl+Shift+V, right-click menu

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:58:53 -05:00
chrome-storm-c442
f7c7fe731f v1.8.5: restore sudo auto-password + fix sudo SFTP operations
Terminal:
- Auto-detect [sudo] password prompts in interactive shell output
- Auto-send server password when sudo prompt detected
- Reset detection flag on new command (Enter key)

SSH client (SFTPSession):
- Fix exec_command() sudo password timing (0.1s delay for prompt)
- Fix listdir_attr_sudo() ls output parsing with proper maxsplit
- Handle filenames with spaces, symlinks, and varied ls formats

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:48:30 -05:00
chrome-storm-c442
6144c17a96 v1.8.4: fix FilesTab showing stale remote files on server switch
- Clear remote panel immediately when switching servers
- Add race condition guards in async SFTP connect/refresh
- Validate alias at each async callback to prevent stale UI updates
- Add switching_servers/disconnected/sftp_server_not_found i18n keys
- Properly handle connection results arriving after server switch

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:34:17 -05:00
chrome-storm-c442
8f55b210b3 v1.8.3: session pool + sidebar indicators
- SessionPool: LRU cache for SSH/SFTP sessions across server switches
- Sidebar: green dot indicators for servers with active sessions
- Sidebar: active sessions count label
- Terminal: buffer preservation on server switch via get_current_buffer()
- FilesTab/TerminalTab: pool integration for session reuse

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:05:05 -05:00
chrome-storm-c442
1a7b075cca v1.8.2: session management hardening
- Fix infinite reconnect loop in terminal (_send_to_shell guard)
- Safe language switch: disconnect + reconnect instead of object transplant
- Improved SFTP reconnect flow with proper validation
- Add log.debug to all silent exception handlers in ssh_client

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:38:27 -05:00
chrome-storm-c442
bae7a916f2 v1.8.1: keepalive + auto-reconnect + preserve sessions on lang switch
- SSH keepalive (30s) on all connections
- SFTP auto-reconnect on connection loss
- Terminal auto-reconnect on send to dead session (max 5 retries)
- Preserve SFTP session when switching UI language
- Guard all remote navigation with connection checks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:31:28 -05:00
chrome-storm-c442
3e9aeababe v1.8.0: file manager improvements
- SFTP cleanup on app close and language switch
- Windows drive selector in local panel
- Browse and Refresh buttons for local panel
- Recursive upload/download/delete of folders
- Drag-and-drop between local and remote panels
- Sudo mode toggle for privileged file operations
- New i18n keys for EN/RU/ZH

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:30:56 -05:00
chrome-storm-c442
a77ca6fee7 v1.7.0: dual-pane SFTP file manager
Replace primitive upload/download form with a full dual-pane file manager
(local + remote) featuring directory browsing, navigation history,
file operations (upload, download, mkdir, delete, rename), progress
tracking, and persistent SFTP sessions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:09:55 -05:00
chrome-storm-c442
c95ce8119b v1.6.2: scrollable Setup tab for small windows
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:50:00 -05:00
chrome-storm-c442
b8e4eba997 v1.6.1: skip redundant auto-backups via content hash
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:41:11 -05:00
chrome-storm-c442
7bc2f1bded v1.6.0: import/export config & backups
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:38:22 -05:00
chrome-storm-c442
b0b7d263fb v1.5.5: terminal zoom, font fallback, copy feedback
- Ctrl+wheel/Ctrl±/Ctrl+0 font zoom (6-28), persisted in settings.json
- Font fallback: Cascadia Mono → Consolas → Courier New (per platform)
- Visual "Copied!" flash in status bar on copy
- Closes audit items #27 (copy feedback) and #29 (font fallback)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:17:51 -05:00
chrome-storm-c442
5440f368bc v1.5.4: smart Ctrl+C — copy on selection, double-tap for SIGINT
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:03:29 -05:00
chrome-storm-c442
1e2c98453a v1.5.3: complete terminal rewrite for full TUI compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:58:26 -05:00
chrome-storm-c442
e148e8e2cd v1.5.2: fix DECCKM — arrow keys work in mc/vim/htop
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:45:37 -05:00
chrome-storm-c442
b3ddc26c2c v1.5.1: fix TUI apps freezing in SSH terminal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:34:21 -05:00
chrome-storm-c442
a83a97c9d5 v1.5.0: network interface binding, SSH fixes, terminal, release script
- Add network interface selection per server (VPN/multi-NIC support)
- Fix "Install Everything" button hanging on error
- Add interactive SSH terminal with PTY (pyte + xterm-256color)
- Add release.py for automated versioning and changelog generation
- Add CLAUDE.md with project instructions
- Add screenshots and release binaries for v1.1–v1.4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:06:41 -05:00
chrome-storm-c442
bf39fd7b67 v1.2.0 + v1.3.0: Localization, About dialog, TOTP/2FA, stability improvements
v1.2.0:
- GUI localization (EN/RU/ZH) with language switcher and persistent selection
- About dialog (ⓘ) with app info, features, quick start guide
- core/i18n.py — internationalization module with t() function
- All GUI components translated via t() keys

v1.3.0:
- TOTP/2FA tab — Google Authenticator compatible codes with live 30s countdown,
  one-click copy, per-server secret management
- core/totp.py — TOTP module (pyotp, RFC 6238)
- core/logger.py — rotating file logger (5MB, 3 backups)
- Stronger Fernet encryption key with automatic migration from old key
- Thread-safe server store with locks, atomic writes, auto-restore on corruption
- Parallel status checks via ThreadPoolExecutor (up to 10 concurrent)
- SSH client: explicit channel cleanup, Unix key permissions
- Server dialog: port validation (1-65535), TOTP secret field
- Language change preserves active tab and server selection
- pyotp dependency added

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:07:51 -05:00
chrome-storm-c442
218b60f7f6 Add build system, versioning, releases, multilingual docs
- version.py with v1.0.0
- build.py (PyInstaller cross-platform build script)
- build.sh / build.bat for quick builds
- releases/ServerManager-v1.0.0-win-x64.exe (Windows x64 binary)
- README.md with docs in English, Russian, Chinese
- CHANGELOG.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 07:58:40 -05:00