Commit Graph

53 Commits

Author SHA1 Message Date
chrome-storm-c442
7af788b72e v1.8.96: persist sidebar width across restarts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 05:47:08 -05:00
chrome-storm-c442
08307fbe9b v1.8.95: resizable sidebar via PanedWindow — drag to widen server list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 05:42:41 -05:00
chrome-storm-c442
bc48aea1e4 v1.8.92: fix Ctrl+S/Q and all Ctrl+key combos with non-Latin keyboard layouts
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>
2026-03-02 04:10:30 -05:00
chrome-storm-c442
bc7be1057b v1.8.91: terminal background pure black (#000000) instead of dark blue
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 04:06:46 -05:00
chrome-storm-c442
bf27141a85 v1.8.81: fix update apply — os._exit(0) to kill daemon threads
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:31:17 -05:00
chrome-storm-c442
9393134593 v1.8.78: auto-updater — Gitea releases check, download, apply
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:00:27 -05:00
chrome-storm-c442
997c7d20a5 v1.8.66: fix 7 Redis bugs — shlex parser, GUI stats, SSL, error handling, dedup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 07:15:46 -05:00
chrome-storm-c442
327647f77e v1.8.63: blue scrollbars matching CTk theme across all tabs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:18:04 -05:00
chrome-storm-c442
1c4288ba93 v1.8.59: fix @staticmethod bug in SQL/PHP format converters
_sql_val and _php_val were @staticmethod but called via self —
caused "takes 1 positional argument but 2 were given" error.
Converted to regular methods. All 16 formats tested OK.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 05:15:34 -05:00
chrome-storm-c442
ec4ad28c29 v1.8.58: results context menu — Copy Cell/Row/All As 16 formats
Right-click on results table:
- Copy Cell — single cell value
- Copy Row — tab-delimited row
- Copy Row As → 16 formats submenu
- Copy All As → 16 formats submenu

Formats: Excel CSV, Tab-delimited, HTML, XML, SQL INSERTs,
SQL INSERT IGNOREs, SQL REPLACEs, SQL DELETE/INSERTs,
SQL UPDATEs, LaTeX, Textile, Jira, PHP Array, Markdown,
JSON, JSON Lines

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 05:06:54 -05:00
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
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
eede67e6a9 feat: multi-type server support — SQL, Redis, Grafana, Prometheus, Telnet, WinRM, RDP/VNC
Full implementation of multi-type server management across GUI and CLI:

New clients: SQLClient (MariaDB/MSSQL/PostgreSQL), RedisClient, GrafanaClient,
PrometheusClient, TelnetSession, WinRMClient, RemoteDesktopLauncher.

New GUI tabs: QueryTab (SQL editor + Treeview), RedisTab (console + history),
GrafanaTab (dashboards + alerts), PrometheusTab (PromQL + targets),
PowershellTab (PS/CMD), LaunchTab (RDP/VNC external client).

Infrastructure: TAB_REGISTRY for conditional tabs per server type,
adaptive server_dialog fields, colored type badges in sidebar,
status checker for all types (SSH/TCP/SQL/Redis/HTTP), 100+ i18n keys.

CLI: ssh.py extended with --sql, --redis, --grafana-*, --prom-*, --ps, --cmd.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:35:24 -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
7b0e7dd6ac fix: editable alias in server dialog + Ctrl+Z undo for all input fields
- Alias field no longer disabled when editing server profile
- Duplicate alias check on rename, session pool migration
- Enable undo (Ctrl+Z) on all CTkEntry widgets across the project

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:17:21 -05:00
chrome-storm-c442
8285e33555 v1.8.7: fix Ctrl+key for non-Latin keyboard layouts
- Replace Cyrillic char bindings (tkinter rejects them) with keycode dispatch
- <Control-Key> handler routes by physical keycode (67=C, 86=V, etc.)
- Works with Russian, Ukrainian, and any other keyboard layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:19:23 -05:00
chrome-storm-c442
0d3c433bac v1.8.7: fix Ctrl+C/V with Russian keyboard layout
- Add Cyrillic key bindings for Ctrl+C/V/D/L/Z and Ctrl+Shift+C/V
- Russian layout: с=C, м=V, в=D, д=L, я=Z
- Fixes: Ctrl+C (SIGINT/copy), Ctrl+V (paste) not working with РУС layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:17:24 -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
339992c2b2 v1.8.6: fix sudo auto-password detection
- Strip ANSI escape sequences before matching sudo prompt
- Normalize \r\n and \r to \n for reliable line splitting
- Add 200ms delay before sending password (let PTY settle)
- Increase buffer to 500 bytes for longer prompts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:07:16 -05:00
chrome-storm-c442
ad13c4e842 v1.8.6: safe Ctrl+C — double-press for SIGINT
- Single Ctrl+C with selection → copy
- Single Ctrl+C without selection → hint "Press again to send SIGINT"
- Double Ctrl+C within 1.5s → sends SIGINT
- Prevents accidental process termination

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 04:02:18 -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
4b505f39d1 fix: Char namedtuple save/restore — use blink not width, construct new Char objects
pyte.screens.Char is a namedtuple (immutable), so fields can't be
mutated directly. Also 'width' doesn't exist — the correct field is
'blink'. Now creates new Char(...) objects for buffer restoration.
Fixes server switching being completely broken (AttributeError on save).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:25:36 -05:00
chrome-storm-c442
afa75b6d9c fix: proper terminal buffer save/restore with full pyte screen state
Save complete pyte screen state (characters, colors, attributes,
cursor position, modes) via pickle serialization instead of just
plain text. Restore via direct buffer manipulation + full redraw.
Fixes broken/garbled layout when switching between servers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:16:47 -05:00
chrome-storm-c442
bf5c4b14a4 fix: restore terminal buffer when switching back to pooled session
Instead of unconditionally resetting the terminal, reused sessions
now restore the saved screen content from the session pool.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 03:10:06 -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
ed34546ef6 fix: preserve SFTP session on language switch
Save and restore live SFTP session when switching languages
instead of disconnecting and recreating everything from scratch.
Terminal reconnects automatically via set_server().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:30:46 -05:00
chrome-storm-c442
85a8c3ffc6 fix: SSH keepalive + auto-reconnect for SFTP and terminal
- Add transport.set_keepalive(30) to all SSH connections
- Add SFTPSession.reconnect() method
- Auto-reconnect in _refresh_remote with retry on failure
- Auto-reconnect before upload/download operations
- Guard all remote navigation methods with connection checks
- ShellSession.connected wrapped in try/except
- Terminal: reset reconnect counter on send failure, increase max to 5
- Terminal: trigger reconnect on send to dead session

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:25:40 -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
6496797424 fix: wrap Setup tab in CTkScrollableFrame for small windows
Content was clipped when window height was insufficient.
Now all sections are accessible via scroll.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:49:31 -05:00
chrome-storm-c442
9baafc9a36 feat: import/export for config and backups
- Add export_config/import_config/export_backup/import_backup to ServerStore
- Add 4 buttons row in Setup tab UI with file dialogs
- Add i18n keys for EN/RU/ZH (16 keys each)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:37:53 -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
80e22e4507 Smart Ctrl+C: copy on selection, double-tap for SIGINT
Single Ctrl+C with selection → copies text to clipboard.
Single Ctrl+C without selection → sends SIGINT.
Double Ctrl+C (within 300ms) → always sends SIGINT.
Protects against accidentally killing programs when trying to copy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:03:03 -05:00
chrome-storm-c442
59163f0469 Complete terminal rewrite for full TUI compatibility
- Alternate screen buffer (smcup/rmcup) for mc, vim, htop, less
- 256-color and truecolor rendering (dynamic tag creation)
- Reverse video and strikethrough attributes
- write_process_input bridge (DA/DSR responses to SSH)
- DECCKM application cursor keys for arrow navigation
- Alt+key combinations (mc panels, readline word nav)
- Shift+Arrow / Ctrl+Arrow with xterm modifier encoding
- Shift+Tab (backtab) for reverse completion
- Bracketed paste mode for clean multi-line paste
- Mouse tracking (basic, button, any-event, SGR extended)
- Incremental UTF-8 decoder (handles split multi-byte)
- Cursor hidden state (DECTCEM) respected
- pyte dirty set for optimized rendering
- Numpad key support
- Professional copy/paste UX:
  - Ctrl+C always sends SIGINT
  - Ctrl+Shift+C/V for copy/paste
  - Right-click context menu with Copy/Paste/Select All
  - Double-click to select word
- Smooth mousewheel scroll (3 lines in alt screen)
- Thread-safe session management (all state on main thread)
- Resize debounce reduced to 100ms
- Send errors trigger disconnect notification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:57:55 -05:00
chrome-storm-c442
1de72a2724 Fix DECCKM support for arrow keys in TUI apps (mc, vim, htop)
- mc/vim/htop enable Application Cursor Mode (DECCKM ?1h) which
  requires arrow keys to send \eOA..D instead of \e[A..D
- Detect DECCKM in pyte screen mode and send correct sequences
- Fix thread-safety: use queue.Queue for SSH→main thread data transfer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:45:07 -05:00
chrome-storm-c442
641f5a41d0 Fix TUI apps (mc, htop, vim) freezing in SSH terminal
- Remove LNM mode that corrupted cursor positioning for TUI programs
- Add render debouncing (~60fps) to prevent UI thread blocking
- Add data batching in terminal tab to reduce render calls
- Increase SSH recv buffer from 4KB to 64KB

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:32:19 -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
0c89e77417 Redesign TOTP code display: larger timer, thicker progress bar, color sync
- Code font: 42 → 52pt
- Timer: separate big seconds (28pt bold) + "sec" unit label
- Progress bar: 300×6 → 400×10, rounded corners, dark track (#2a2a3e)
- Timer + progress bar color syncs with code (green → yellow → red)
- Code frame corner radius 12 → 16, more padding

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:18:51 -05:00
chrome-storm-c442
b8c61e4719 Add click-to-copy animation on TOTP code display
- Click anywhere on the code area copies to clipboard
- Visual feedback: green flash + checkmark for 400ms
- Hand cursor on code frame, label, and timer
- Copy button still works as before

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:10:41 -05:00