Commit Graph

51 Commits

Author SHA1 Message Date
Jokul 90d56f2a12 feat: batch delete preview, FlushDB, search history, cancel scan
- P2-7: KeyList batch delete preview dialog (max 100 keys shown)
- P2-11: StatusView FlushDB with double confirmation (type FLUSHDB)
- P2-12: KeyList search history (localStorage, max 20, dropdown on focus)
- P2-13: key store cancelScan() + KeyList cancel button
- i18n keys for all features (zh-CN + en)
2026-07-07 22:04:47 +08:00
Jokul b85e67541b feat: ReJson/TairJson support
- string.ts: rejsonGet, rejsonSet, rejsonDel using JSON.GET/SET/DEL
- IPC + preload for rejsonGet/rejsonSet
- New ReJsonEditor.vue: Monaco JSON editor with JSON.GET/SET
- KeyDetail: dispatch ReJSON-RL/json/tair-json types to ReJsonEditor
2026-07-07 21:58:17 +08:00
Jokul 1511427e62 feat: custom formatter support
- format.ts: customFormat() uses child_process.execFile
- Template params: {KEY} {VALUE} {HEX_FILE}
- Value written to temp file, path passed via {HEX_FILE}
- 10s timeout, error handling
- StringEditor: 'custom' format option + command input
- Command persisted to localStorage
- i18n keys (zh-CN + en)
2026-07-07 21:54:13 +08:00
Jokul e63940b548 feat: multi-format viewer (Text/Hex/JSON/Binary/Gzip/Deflate/Brotli)
- New format.ts: decodeValue + detectFormat using Node.js zlib
- IPC: redis:decodeValue, redis:detectFormat
- StringEditor: format selector dropdown with auto-detect
- Monaco editor shows decoded value, read-only for compressed formats
- Auto-detect: JSON, Gzip (1f 8b), Deflate (78 xx), non-printable → Hex
- i18n keys for all formats (zh-CN + en)
2026-07-07 21:48:52 +08:00
Jokul cdadfbe5e4 feat: Stream consumer groups UI
- stream.ts: streamGroups, streamConsumers, streamGroupCreate, streamGroupDestroy, streamAck
- IPC: redis:streamGroups, streamConsumers, streamGroupCreate, streamGroupDestroy, streamAck
- Preload bridge + types for all new methods
- StreamEditor.vue: collapsible consumer groups panel
  - XINFO GROUPS table with name/consumers/pending/last-delivered-id
  - Click group to expand XINFO CONSUMERS
  - Create group dialog (name, start ID, MKSTREAM)
  - Destroy group with confirm
- i18n keys (zh-CN + en)
- P1 complete!
2026-07-07 21:22:12 +08:00
Jokul 00c11d4dfe feat: CLI MULTI/EXEC transaction support
- CliView: detect MULTI/EXEC/DISCARD commands
- MULTI enters transaction mode (tx> prompt, yellow)
- Commands in tx mode are queued (QUEUED + queue count)
- EXEC executes all queued commands, shows array results
- DISCARD cancels transaction
- WATCH/UNWATCH handled as non-queued tx commands
- i18n keys for tx messages (zh-CN + en)
2026-07-07 21:11:23 +08:00
Jokul c7e47c4d5b feat: CLI SUBSCRIBE/MONITOR streaming mode
- New pubsub.ts: startSubscribe/stopSubscribe/startMonitor/stopMonitor
- IPC: redis:subscribe, redis:unsubscribe, redis:monitor, redis:monitorStop
- Streaming messages pushed via webContents.send
- Preload: onSubscribeMessage/onMonitorMessage callbacks
- CliView: detect SUBSCRIBE/PSUBSCRIBE/MONITOR, switch to streaming mode
- Stop button with pulsing indicator (green=subscribe, yellow=monitor)
- Real-time message display with timestamps
- Auto-cleanup on unmount
- i18n keys (zh-CN + en)
2026-07-07 21:07:57 +08:00
Jokul 742c62517c feat: Redis command autocomplete in CLI
- New src/data/commands.ts: 139 Redis commands across 11 categories
- CliView.vue: autocomplete dropdown with prefix matching
- Category-colored command names (admin=read=green/write=yellow/etc)
- Up/Down navigate suggestions, Tab/Enter selects, Escape closes
- History navigation preserved when suggestions hidden
- Syntax and description shown for each command
2026-07-07 20:59:59 +08:00
Jokul 05a6f6aa17 feat: Monaco editor for StringEditor
- Install monaco-editor + @guolao/vue-monaco-editor
- main.ts: loader.config + MonacoEnvironment worker setup
- StringEditor.vue: replace textarea with Monaco editor
- JSON syntax highlighting, folding, word wrap
- Read-only mode when not editing, auto-detect JSON
- Theme follows app theme (vs-dark/vs)
- Font size follows app settings
2026-07-07 20:37:04 +08:00
Jokul 6a1f94cd48 feat: multi-connection parallel support
- connection store: connectedIds array, per-connection health/serverInfo maps
- connect() no longer disconnects existing connections
- New switchTo(id), disconnectById(id), isConnectedById(id) methods
- Per-connection health check timers (Map-based)
- ConnectionCard: switch to connected, connect if not, disconnect if active
- MainArea: per-connection tab state (save/restore on switch)
- Connection switcher dropdown in tab bar showing all open connections
- Clean up tab state when connection disconnects
2026-07-07 20:31:57 +08:00
Jokul 11a73494c0 feat: multi-tab support in MainArea
- Refactor MainArea: tabs array + activeTabId (was single activeTab)
- Open/close tabs dynamically, status tab not closable
- Tab opener buttons (keys/cli/slowlog/memory) in top-right
- Right-click context menu: close/closeOthers/closeRight/closeLeft
- Mouse wheel cycling through tabs
- Scrollable tab bar with hidden scrollbar
- i18n keys for tab context menu (zh-CN + en)
2026-07-07 20:26:47 +08:00
Jokul 405dfa77c4 feat: auto-updater integration
- Install electron-updater
- New updater.ts: check/download/install with progress events
- IPC: updater:check, updater:download, updater:install, updater:status
- Preload bridge for updater API
- electron-builder publish config (github provider)
- Fix build files path: out -> electron-dist
- i18n keys for updater notifications (zh-CN + en)
2026-07-05 22:13:25 +08:00
Jokul d131a2732d feat: Command Log dialog
- New commandLogger.ts: in-memory log (max 5000 entries)
- withLog() wrapper in ipc-handlers.ts for all write commands
- CommandLog.vue: table with time/command/duration, write-only filter
- IPC: redis:getCommandLog, redis:clearCommandLog
- Ctrl+G shortcut from Sidebar
- i18n keys (zh-CN + en)
2026-07-05 21:48:33 +08:00
Jokul 15869943e8 feat: Memory Analysis tab
- New MemoryAnalysis.vue: scan all keys with MEMORY USAGE
- Pause/resume/stop scanning, min size filter, sort asc/desc
- Added as tab in MainArea with Odometer icon
- i18n keys for all memory analysis labels (zh-CN + en)
2026-07-05 21:23:43 +08:00
Jokul 169017df65 feat: Cluster mode support
- NewConnectionDialog: cluster checkbox
- connection.ts: use Redis.Cluster() when cluster is enabled
- i18n keys for cluster (zh-CN + en)
2026-07-05 21:20:42 +08:00
Jokul e46d6a80be feat: Sentinel mode support
- NewConnectionDialog: sentinel toggle + host/port/masterName/nodePassword form
- connection.ts: use ioredis sentinels config when sentinelEnabled
- Add sentinelEnabled/sentinelHost/sentinelPort/sentinelNodePassword to all types
- i18n keys for all sentinel fields (zh-CN + en)
2026-07-05 16:43:52 +08:00
Jokul 1686af1a79 feat: TLS certificate file support
- NewConnectionDialog: TLS cert file selectors (CA/Cert/Key) + rejectUnauthorized checkbox
- connection.ts: read cert files and pass to ioredis tls options
- Add tlsRejectUnauthorized to all ConnectionConfig types
- i18n keys for tlsCaPath/tlsCertPath/tlsKeyPath/tlsRejectUnauthorized
2026-07-05 16:35:38 +08:00
Jokul 6e6f170403 feat: SSH tunnel support
- Add ssh2 dependency for SSH port forwarding
- NewConnectionDialog: SSH toggle + host/port/user/password/privateKey/passphrase form
- connection.ts: createSshTunnel() with local port forwarding
- Connect ioredis through SSH tunnel when sshEnabled
- Clean up SSH client + tunnel server on disconnect
- i18n keys for all SSH fields (zh-CN + en)
- Add sshPassphrase to all ConnectionConfig types
2026-07-05 16:25:35 +08:00
Jokul 79f8217dfb fix: radio-button, input-number dark theme 2026-07-05 00:00:02 +08:00
Jokul 1caf5c1f24 fix: dark theme Element Plus components
- Buttons: dark bg, hover/active states
- Dropdowns/Selects: dark bg, matching border
- Tabs, Tooltips, Dialogs, Drawers
- Added --bg-hover, --bg-tertiary variables
2026-07-04 23:56:45 +08:00
Jokul 393c82c879 feat: StatusView i18n + 1s auto-refresh
- Section titles (Server, Clients, Memory...) follow app language
- Auto-refresh every 1 second
- Clean up interval on unmount/disconnect
2026-07-04 23:48:27 +08:00
Jokul d2fd07161c fix: UI improvements
- Remove auto-open devtools
- Settings as right drawer
- DB selector in title bar
- Sidebar expand/collapse
- Fix dark mode colors for key detail
2026-07-04 23:38:09 +08:00
Jokul 09b86e3d45 feat: optimize key list with list/tree views
- Add list view (flat) and tree view (hierarchical)
- Tree view shows folder expand/collapse with key count
- Add view mode toggle button
- Add i18n support for all key list text
2026-07-04 23:17:51 +08:00
Jokul e5ef0242d8 feat: add i18n to status bar 2026-07-04 23:04:25 +08:00
Jokul 24a12732ae feat: add i18n to connection list and dialog 2026-07-04 23:00:35 +08:00
Jokul 97795866d0 fix: make i18n reactive to language changes 2026-07-04 22:54:27 +08:00
Jokul 38f2a8fbf0 feat: show settings tab on startup screen 2026-07-04 22:38:52 +08:00
Jokul 3b402771d5 fix: i18n, password edit, and key count issues
- Add i18n to all components (zh-CN/en)
- Fix password not showing when editing connection
- Fix key count showing 0 by adding getInfo function
2026-07-04 22:26:32 +08:00
Jokul 86b0eff95b fix: make main area fill remaining width 2026-07-04 21:45:59 +08:00
Jokul 9f1341316d fix: add transparent window and fix CSS layout 2026-07-04 21:39:30 +08:00
Jokul 868ef1737e fix: add type declarations for CSS imports 2026-07-04 21:33:23 +08:00
Jokul 1b7b3fd5e8 fix: restore missing CSS styles 2026-07-04 21:31:37 +08:00
Jokul bdcf4fe299 refactor: restructure project layout
- Move main process to electron/main/
- Move preload to electron/preload/
- Add shared types in electron/shared/
- Split redis-service into modular redis/ directory
- Flatten renderer to src/ (remove src/renderer/ nesting)
- Update electron.vite.config.ts paths
- Update tsconfig paths
- Output to electron-dist/
2026-07-04 21:12:50 +08:00
Jokul bb885c6d6d fix: 使用 BrowserWindow.setIcon 替代 app.setIcon 2026-07-04 20:36:16 +08:00
Jokul 687fea4018 fix: 更新所有图标为 JRD
- 任务栏图标使用 nativeImage
- Linux 使用 app.setIcon()
- TitleBar logo 改为 JRD
- MainArea placeholder 改为 JRD
2026-07-04 20:34:34 +08:00
Jokul c85318cc4d feat: 添加应用图标
- SVG 图标设计:数据库 + Redis R 字母 + 连接节点
- 生成各尺寸 PNG (16-512px)
- electron-builder 配置图标路径
- 主进程窗口使用图标
2026-07-04 20:28:41 +08:00
Jokul d3f09f0e87 fix: 默认语言改为中文 2026-07-04 20:22:36 +08:00
Jokul da37760e04 feat: 开发模式自动打开 DevTools 2026-07-04 20:19:09 +08:00
Jokul 7f2c753470 fix: 修复 preload 路径 (.mjs 而不是 .js)
- electron-vite v3 输出 .mjs 文件
- 更新 preload 路径为 index.mjs
- 这是 window.electronAPI undefined 的根本原因
2026-07-04 20:10:58 +08:00
Jokul d488612c27 debug: 添加连接日志 2026-07-04 20:06:43 +08:00
Jokul 88dfedc544 fix: Redis 连接等待就绪信号
- enableReadyCheck: true 等待 READY 信号
- 连接超时 12 秒
- 错误时正确断开连接
- 测试连接现在会返回具体错误信息
2026-07-04 20:03:40 +08:00
Jokul b9d64ed851 fix: register Element Plus icons globally
- Import and register all @element-plus/icons-vue
- Fixes icons showing as squares/rectangles
2026-07-04 19:54:34 +08:00
Jokul 4075f20c07 fix: test connection passing auth instead of password
- testConnection now maps auth -> password for Redis service
- fixes test connection failing even with correct credentials
2026-07-04 19:52:30 +08:00
Jokul 7c0cce3e64 feat(phase7): pattern search, health check, keyboard shortcuts
- KeyList: pattern input for Redis MATCH, local filter, Go button
- ConnectionStore: health check interval (5s ping), healthOk state
- StatusBar: health indicator (unstable = yellow pulse)
- RedisService: ping, isConnected methods
- Sidebar: Delete key (Del), deselect (Esc), refresh (F5)
- useKeyboard: expanded shortcut map
2026-07-04 19:39:22 +08:00
Jokul 0ac0436cfd feat(phase6): test connection, keyboard shortcuts, import/export
- NewConnectionDialog: test connection button before save
- useKeyboard composable: Ctrl+N (new), Ctrl+R (refresh keys)
- ConnectionList: import/export JSON buttons
- ConnectionStore: testConnection, exportConnections, importConnections
- i18n support in Sidebar (keyboard shortcuts)
2026-07-04 19:35:03 +08:00
Jokul 6b9c6a1ed5 feat(phase5): stream editor, i18n, settings, key management
- StreamEditor: view/add/trim/delete entries with field management
- KeyDetail: TTL editor dialog, rename dialog, copy key name button
- i18n: English + Chinese locale system with composable
- SettingsView: theme selector, language switch, scan count, font size
- MainArea: added Settings tab
- RedisService: stream/rename/exists operations
- Preload: stream/rename/exists IPC channels
2026-07-04 18:26:51 +08:00
Jokul 4c66263477 feat(phase4e): batch delete with multi-select
- KeyList: multi-select mode with checkbox toggle
- Batch delete bar shows selected count + delete button
- RedisService: batchDelete using pipeline
- Preload: batchDelete IPC channel
2026-07-04 18:09:01 +08:00
Jokul ff09f5dc03 feat(phase4): list/set/zset editors, CLI, slow log, DB selector
- ListEditor: pagination, push, edit, remove elements
- SetEditor: filter, add, remove members
- ZsetEditor: filter, add with score, remove members
- CliView: interactive terminal with command history
- SlowLogView: slow log table with time/duration/command
- DbSelector: dropdown to switch Redis databases (0-15)
- StatusBar integrated with DB selector
- MainArea: added CLI and Slow Log tabs
- KeyDetail: dispatch to List/Set/Zset editors
- RedisService: list/set/zset/slowlog/memory operations
- Preload: all new IPC channels typed
2026-07-04 18:07:33 +08:00
Jokul 272eb6b3af feat(phase3): key browser MVP
- useKeyStore (Pinia): scan, tree view, key data cache, db switching
- KeyBrowser: split pane with KeyList + KeyDetail
- KeyList: SCAN pagination, filter, tree toggle, load more
- KeyDetail: type badge, TTL display, delete, type-based editor dispatch
- StringEditor: view/edit with JSON auto-format
- HashEditor: field table, add/edit/delete fields
- StatusView: INFO dashboard with stat cards + section grid
- MainArea: tab host (Status / Keys)
- RedisService: selectDb, dbSize
- Preload: selectDb, dbSize IPC channels
- App.vue updated with MainArea layout
2026-07-04 17:48:41 +08:00
Jokul 4f9398c65d feat(phase2): connection management
- RedisService in main process (ioredis wrapper, execute, scan, hash ops)
- electron-store for connection/settings persistence
- safeStorage credential encrypt/decrypt
- IPC handlers for redis, storage, credential channels
- Preload API typed with all new channels
- useConnectionStore (Pinia) with connect/disconnect/save/delete
- ConnectionCard with 3D hover effect + status indicator
- ConnectionList with search filter
- NewConnectionDialog (create/edit connection form)
- Sidebar component
- StatusBar with live connection status + pulse animation
- App.vue updated with Sidebar layout
2026-07-04 17:45:19 +08:00