# FinalZero **Repository Path**: yu_junwei/final-zero ## Basic Information - **Project Name**: FinalZero - **Description**: 一款面向 Windows 的现代化 SSH / SFTP / Telnet 客户端工具 - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-10 - **Last Updated**: 2026-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: SSH, 运维, 客户端工具 ## README
# FinalZero [简体中文](./README.md) | [English](./README_EN.md) **A modern SSH / SFTP / Telnet client for Windows** Secure Encryption · Multi-Protocol · Multi-Tab Terminal · System Monitoring · File Management · **AI Assistant** · **Cloud Sync** [![Version](https://img.shields.io/badge/version-1.0.12-4B3FE3?style=flat-square&logo=semver)](#version-information) [![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square&logo=opensourceinitiative)](#license) [![Platform](https://img.shields.io/badge/platform-Windows%2010%2F11-0078D4?style=flat-square&logo=windows)](#requirements) [![Electron](https://img.shields.io/badge/Electron-28-47848F?style=flat-square&logo=electron)](https://www.electronjs.org/) [![React](https://img.shields.io/badge/React-18-61DAFB?style=flat-square&logo=react&logoColor=black)](https://react.dev/) [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square&logo=github)](#contributing)
--- ## Table of Contents - [Project Overview](#project-overview) - [Core Features](#core-features) - [Design Philosophy](#design-philosophy) - [Use Cases](#use-cases) - [Features](#features) - [Connection and Session Management](#1-connection-and-session-management) - [Multi-Tab Terminal](#2-multi-tab-terminal) - [SFTP File Management](#3-sftp-file-management) - [Command Manager](#4-command-manager) - [Key Management](#5-key-management) - [System Monitoring](#6-system-monitoring) - [Port Forwarding](#7-port-forwarding) - [RDP / VNC Remote Desktop](#8-rdp--vnc-remote-desktop) - [Settings Center](#9-settings-center) - [Master Password Lock](#10-master-password-lock) - [AI Assistant](#11-ai-assistant) - [Cloud Sync](#12-cloud-sync) - [Data Security](#13-data-security) - [Container Management (Docker)](#14-container-management-docker) - [Installation and Configuration Guide](#installation-and-configuration-guide) - [Requirements](#requirements) - [Quick Installation](#quick-installation) - [Development Environment Setup](#development-environment-setup) - [Configuration Files](#configuration-files) - [Usage Examples](#usage-examples) - [Quick Start Workflow](#quick-start-workflow) - [SSH Connection Example](#ssh-connection-example) - [SFTP File Transfer Example](#sftp-file-transfer-example) - [Quick Command Example](#quick-command-example) - [Version Information](#version-information) - [Current Version](#current-version) - [Versioning Rules](#versioning-rules) - [Changelog](#changelog) - [Future Plans](#future-plans) - [Tech Stack](#tech-stack) - [Directory Structure](#directory-structure) - [FAQ](#faq) - [Contributing](#contributing) - [How to Contribute](#how-to-contribute) - [Commit Message Convention](#commit-message-convention) - [Development Workflow](#development-workflow) - [License](#license) --- ## Project Overview FinalZero is a modern desktop SSH client built on **Electron + React + TypeScript**, with a UI following the Ant Design design language. Its goal is to deliver a secure, efficient, and easy-to-use remote server management experience. All data — connections, groups, commands, keys, transfer records, and more — is stored in a local SQLite database. The database is fully encrypted with **SQLCipher 4** (master key managed by Windows DPAPI), while sensitive fields receive an additional layer of **AES-256-GCM** encryption, providing comprehensive local data security protection. > **Status note**: The project is in a stage of continuous iteration; features will be constantly added and improved. ### Core Features | Capability | Description | |--------|------| | Multi-protocol connections | SSH, SFTP, Telnet, **RDP**, **VNC**, **WSL**, **Local Shell**; password / private key / **SSH Agent** / keyboard-interactive authentication | | Multi-tab terminal | Independent connection per tab, supports duplicate / rename / tab colors, **line number / timestamp gutter**, **keyword highlighting**, **action links**, **recursive split panes** | | File management | Upload / download, resumable transfers, persistent transfer queue, **directory sync**, **packed download**, **remote file editor** (safe write) | | System monitoring | Real-time CPU / memory display in the status bar, red alerts above thresholds | | Command management | Group management, built-in common templates, double-click to execute | | Key management | SSH private key management, host key verification, MITM attack prevention, **host key confirmation coordinator** | | **AI Assistant** | **Ask conversational Q&A + command generation + risk labeling; Agent ReAct autonomous multi-step execution + approval flow; multimodal attachments** | | **Cloud Sync** | **WebDAV / S3 compatible, encrypted multi-device configuration sync, conflict resolution** | | **Container Management** | **Docker containers / images / networks / Compose / Swarm; local and remote (SSH tunnel) transports; preflight + approval flow** | | Data security | Full-database encryption + field-level encryption + automatic migration + **Master Password Lock** | ### Design Philosophy - **Security first**: All sensitive data is doubly encrypted; keys are managed by system-level DPAPI and bound to the account. - **Experience first**: Modern UI, fluid interactions, multi-tab sessions running independently without interference. - **Out of the box**: Built-in common command templates and monitoring metrics, ready to use with zero configuration. - **Extensibility**: Modular architecture, already supporting RDP / VNC remote desktop and WOL wake-on-LAN, making it easy to further extend protocols such as serial ports. ### Use Cases - Ops engineers managing multiple Linux / Windows Server machines - Developers performing remote development, deployment, and debugging - System administrators running batch ops commands and monitoring resources - Enterprise users who need securely encrypted storage of connection credentials --- ## Features ### 1. Connection and Session Management **Protocols & Authentication** - Supports **SSH, SFTP, Telnet, RDP, VNC, Serial, WSL, Local Shell** protocols; serial supports port enumeration, baud rate, data bits, stop bits, parity, and flow control configuration - Authentication methods: password, private key (with passphrase), **SSH Agent**, keyboard-interactive, (RDP) system-level credentials - Advanced configuration: proxy (HTTP / SOCKS4 / SOCKS5), Keep-Alive, connection timeout, ready timeout, terminal type - **Jump Host**: When enabled, an SSH tunnel is established through the jump host, so the target server does not need to be directly exposed to the public internet - **Startup command**: Automatically executes preset commands after a successful connection (one per line) - **Connection tags & notes**: Sessions can be tagged (tags) and annotated with notes; tags can be used as filters when searching - **WOL wake-on-LAN**: Sends a magic packet via `wol.send` to the configured MAC address to wake up the server **Group Management** - Supports multi-level groups / subgroups with indentation and node connector lines - Expand / collapse using plus / minus icons - Groups can be renamed, deleted, and drag-sorted - The context menu supports "Move Group", allowing a group and its sessions to be moved together **Session List** - Supports favorites, search filtering, and drag-sorting - Single-click a session → connection details shown on the right (basic info, authentication, advanced configuration, last connection time) - Double-click a session → opens a standalone terminal tab - Context menu: New Connection, New Group, Duplicate, Edit, Delete, Favorite / Unfavorite, Connect, Move Group **Connection History** - Records each connection's session, server, status, start/end time, and duration - Supports viewing by status and clearing history - Click a history entry to reconnect quickly ### 2. Multi-Tab Terminal - **Independent operation**: Each tab corresponds to an independent connection; content does not affect other tabs; the same connection can open multiple tabs - **Tab operations**: Context menu supports rename, duplicate tab, set tab color, close current / others / to the right / all tabs - **Terminal capabilities**: Based on xterm.js, supports font, font size, **line height**, **cursor style (block / bar / underline)**, theme, encoding, scrollback lines, terminal type, and other settings - **Split panes**: A single tab can host multiple independent terminal streams (streamId), with 1×1 / 1×2 / 2×1 / 2×2 layouts - **Terminal search**: Ctrl+F supports highlight / case sensitivity / regex / navigation up and down - **Command history**: Isolated per session, persistently stored, with ↑/↓ recall - **Zmodem transfer**: `rz / sz` automatic interception, file picker dialog + progress status bar, terminal automatically recovers after transfer - **Quick commands**: The terminal view provides a quick command panel; double-click a command to run it directly in the current connection - **Shortcuts**: Configurable global shortcuts (new session, switch tabs, copy/paste, terminal search, fullscreen, etc.), with conflict detection and reset to defaults - **Line number / timestamp gutter**: Optional left sidebar showing logical line numbers and per-line arrival time (`showLineNumbers` / `showTimestamps`) - **Keyword highlighting**: Built-in rules scan output lines, colorizing error / warn / success / info / dates / numbers / URLs / UUIDs / version numbers, etc. (`enableKeywordHighlight`) - **Action links**: Automatically recognizes IPv4, `host:port`, and archive file names; click to copy to clipboard (`enableActionLinks`) - **Interaction enhancements**: Copy on selection (`selectOnCopy`), paste on right-click (`rightClickPaste`), command suggestions (`enableSuggestions`) ### 3. SFTP File Management - **File operations**: Remote / local file lists, supporting upload, download, delete, rename, and new directory - **Resumable transfers**: Upload / download supports resume and pause / resume; interrupted large-file transfers can continue - **Transfer queue**: Transfer records are persistently saved to the database and survive view switches or app restarts; supports manual cleanup; each record can open the local file's folder with one click - **Collapsible panels**: The server file list panel, file management panel, and transfer queue panel are all collapsible, improving usability on small screens - **Directory sync (DirSync)**: Remote ⇄ local bidirectional directory sync; preview differences first (remote-only / local-only / remote-newer / local-newer / same), then selectively apply; results shown in three colors (success / failure / skipped) - **Packed download**: Multi-select files / directories in the remote file list and pack them into an archive for download with one click - **Remote file editor**: Read / write remote text files directly in the app via `sftp.readFile / sftp.writeFile`, avoiding the tedious download-then-upload flow ### 4. Command Manager - Quick command manager supporting command groups (multi-level), custom names, command content, descriptions, ordering, and favorites - Built-in common command templates, ready out of the box: | Category | Example Commands | |------|----------| | System monitoring | `top`, `free -h`, `df -h` | | Network tools | `ss -tulnp`, `ip a`, `ping` | | File operations | `ls -lah`, `find / -name` | | Deployment & release | `git pull && docker-compose up -d` | - Double-click a command to execute it in the current active terminal without manual typing ### 5. Key Management - A dedicated "Key Management" feature (peer to Terminal, SFTP, Command Manager, and Settings) - Manage SSH private keys: key name, type, fingerprint, public key, notes, etc. - Private key content shows only the first and last parts in the UI to avoid full exposure - **Host key verification**: Verifies the server fingerprint on connection to prevent man-in-the-middle attacks - Key data is included in the configuration import / export scope; sensitive content is encrypted on export ### 6. System Monitoring - **Real-time status bar**: After a connection is established, the bottom status bar shows the current server's CPU usage, memory usage, OS version, uptime, and other basic info in real time - **Threshold alerts**: CPU or memory usage above 90% is highlighted in red for at-a-glance recognition - **Monitoring charts panel**: Metric trends visualized as ECharts charts for intuitive viewing - **System info caching**: hostname, OS, kernel, arch, and CPU model are cached after the first collection to avoid repeated fetching ### 7. Port Forwarding - Supports **local forwarding / remote forwarding / dynamic forwarding (SOCKS)** modes - Complete IPC channels: `forward.create / stop / delete / list` - The forward info object (ForwardInfo) shows the actual listening port (actualPort), running status, and error message - Supports `autoStart`; forwarding rules marked as such start automatically once a connection is established ### 8. RDP / VNC Remote Desktop - **RDP**: Invokes the system `mstsc.exe` to host the remote desktop session in a standalone window; supports domain, screen mode (window / fullscreen), and NLA network-level authentication; credentials are entered interactively in the system window and are not written to config files - **VNC**: A standalone `VncPanel` tab rendered by noVNC, with WebSocket bridging to `VncService` - Unified tab management: Remote desktop tabs coexist with SSH terminal tabs; supports disconnect / reopen ### 9. Settings Center The settings UI is embedded in the main window and includes the following sections: | Section | Description | |------|------| | General | Launch at startup, auto-connect last session at launch, window close behavior (minimize to tray / ask / exit), language switching | | Appearance | Theme and other UI display settings | | Terminal | Font, font size, **line height**, **cursor style**, encoding, scrollback lines, terminal theme, **line number / timestamp gutter**, **keyword highlighting**, **action links**, **copy on selection / paste on right-click / command suggestions** | | Network | Proxy-related settings | | Shortcuts | Shortcut configuration for common actions (conflict detection + reset to defaults) | | Security Lock | Master password setup, auto-lock timeout, max failed attempts, lock overlay | | **AI Assistant** | **Provider / model configuration, default model, Agent steps / timeout, approval policy** | | **Cloud Sync** | **WebDAV / S3 provider, device name, namespace, startup check, auto push / pull** | | Logs | Log level and viewer | | About | App name, version, build info, copyright, and related links | ### 10. Master Password Lock - Full IPC: `lock.status / lock.setup / lock.unlock / lock.lock / lock.reset / lock.activity` - Enabled after the master password is first set; auto-lock timeout is configurable (locks automatically after a period of idle time) - Max failed attempts (maxFailedAttempts) + temporary lockout (lockedUntil deadline) to prevent brute-force attempts - Lock overlay: While locked, covers the entire app layer; the last working scene is restored after unlocking ### 11. AI Assistant > Benchmarked against the NyaTerm AI Assistant, split into **Ask mode** (phase one) and **Agent mode** (phase two). **Ask mode (conversational Q&A + command generation)** - Persistent `AiPanel` on the right side, supporting multi-session chat, streaming output (`ai.stream.delta/done/error`), and history search - Invoked from the terminal context menu: explain selection, explain recent output, analyze errors, generate commands - Commands returned by AI are displayed as structured `CommandCard` cards with **four-level risk labeling** (low / medium / high / critical) - Command cards support: execute, append to terminal, save as quick command - **Provider configuration**: OpenAI Compatible interface, with multiple providers and models configurable (`ai.providers.*` / `ai.models.*`, including `ai.models.discover` auto-discovery) - **Risk rule library**: `src/shared/aiRiskRules.ts` local regex + whitelist rules (deterministic first, not relying on model self-restraint) - **Context sanitization**: Passwords, private keys, and other sensitive content are stripped before sending - API credentials and chat data are covered by field-level encryption + auditing **Agent mode (ReAct autonomous multi-step execution)** - Autonomously executes multi-step commands in the user-designated active terminal session following the ReAct loop and observes the results - **Dual tools**: `execute_command` (executes a command and returns an output summary) + `final_answer` (task summary, kept separate from actual terminal execution records) - **Dual-channel risk assessment**: Model-declared risk + local rule library → `effective = max`; critical forces manual confirmation - **Approval flow**: High-risk commands pause the loop, awaiting `ai.agent.approve / reject`; approved commands can be edited before execution - **Intervenable**: Any step can be aborted (`ai.agent.stop`); failed steps can be retried - **Persistence**: `ai_agent_runs` / `ai_agent_steps` tables store runs and per-step status, commands, and output summaries - **Native tool calling + JSON protocol fallback**: Prefers the OpenAI Compatible `tools` parameter; falls back to JSON protocol parsing on failure - Step limits / per-step timeout control to prevent runaway execution - `AgentRunPanel` displays a step timeline (running / completed / failed / timed out / pending approval / blocked by policy) **AI-related IPC channels**: `ai.providers.*`, `ai.models.*`, `ai.chat.*`, `ai.stream.*`, `ai.agent.*` (start / stop / approve / reject / status / history / stepDetail / step / done / error) **v1.0.6 enhancements** - **Multi-model selection**: Ask / Agent chat UIs can switch between enabled models (`AiModelSelect` component + `AiModelResolver` service, default resolved by `isDefault`, with legacy-data `configuredModelId` compatibility fallback) - **Streaming response + reasoning separation**: `AiStreamDelta` distinguishes `content` / `reasoning` kinds; `AiMessage` / `AiStreamDone` add a `reasoningContent` field, storing the reasoning process and the final answer separately - **Markdown rendering**: `MarkdownMessage` component renders GFM based on `react-markdown` + `remark-gfm`, with one-click code block copy - **Thinking panel** (`ThinkingPanel`): Collapsed display of provider reasoning content and Agent thought chains, with a streaming loading animation - **Terminal context injection**: `terminalContextStore` registers active terminal output readers; `AiChatRequest` / `AiAgentStartRequest` add a `terminalContext` field; the main process re-limits length and sanitizes before forwarding to the provider ### 12. Cloud Sync > Encrypted multi-device configuration sync, supporting WebDAV and S3-compatible storage. - **Providers**: WebDAV, S3-compatible (`SyncProviderType = 'webdav' | 's3'`) - **Settings** (`CloudSyncSettings`): enabled, provider, deviceName, remoteNamespace, webdav* / s3*, checkOnStartup, autoPull, autoPush, pushDebounceSec - **Runtime status** (`CloudSyncStatus`): idle / pushing / pulling / syncing / conflict / error, with lastPushAt, remoteRevision, localHash / remoteHash - **Credential encryption**: webdavPassword / s3SecretKey field-level encryption (write-only) - **IPC channels**: `sync.getSettings / saveSettings / test / push / pull / status / resolveConflict / notifyChange / statusChanged / clearRemote` - **Conflict resolution**: `sync.resolveConflict` handles concurrent multi-device modifications - Standalone `SyncPanel` view + Settings → Cloud Sync subpage **v1.0.6 enhancements** - **Category selection**: `SyncCategory` provides 10 independently selectable data domains (settings / connections / groups / history / commands / credentials / aiConfig / aiHistory / fileTransfers / auditLogs); `DEFAULT_SYNC_CATEGORIES` leaves auditLogs unchecked by default; `CloudSyncSettings.categories` field - **Remote wipe**: `sync.clearRemote` clears remote sync data with one click - **Sync display**: `syncDisplay` timestamp formatting (local timezone, no locale separators) ### 13. Data Security > **Two-layer encryption protection keeps local data safe** - **Full-database encryption**: The database uses SQLCipher 4 format encryption; the master key is a 32-byte random key stored via Windows DPAPI (system keychain) and bound to the current Windows account. Copying the db file alone cannot reveal any content. - **Field-level encryption**: Sensitive fields such as passwords, private keys, and passphrases are additionally encrypted in-database with **AES-256-GCM**, forming double protection. - **Automatic migration**: Plaintext databases produced by older versions are automatically migrated to an encrypted database at startup, with automatic backup before migration, automatic rollback on failure, and plaintext backup deletion on success — data remains intact. - **Configuration import / export**: Connections, commands, keys, and other data support wholesale export and import; password- and key-related content is encrypted. - **Audit logs**: Critical operations are recorded for traceability. - **Security lock**: Master password + auto-lock + failed-attempt lockout, triple protection (see Section 10). - **SQL log redaction** (v1.0.6): `sqlLogRedaction` automatically detects SQL statements containing `password` / `passphrase` / `private_key` / `api_key_enc` / `proxy_password` / `PRAGMA key` and replaces them with `[REDACTED sensitive SQL]` in dev logs, preventing credential leakage into logs. ### 14. Container Management (Docker) > New in v1.0.9. A unified Docker ops workbench, supporting both local Docker Engine and remote host (via SSH tunnel) transports. **Coverage** - **Containers**: list / details / start-stop / restart / delete / create (with preflight) / exec into terminal - **Images**: list / pull (with cancel and progress stream) - **Networks**: list - **Compose**: project list / YAML preview / operations (up/down/restart) with preflight and impact assessment - **Swarm**: stack list - **Dashboard**: `docker.dashboard` aggregates container/image/network/volume statistics - **Observability**: `docker.observability.subscribe` real-time events and stats subscription stream **Transports & Connectivity** - **Local transport**: Connects directly to the local Docker Engine (named pipe / unix socket) - **Remote transport** (`RemoteDockerTransport`): Bridges an existing SSH connection's ssh2 channel into a Node HTTP socket, reusing `DockerServicePool` — no extra ports need to be opened on the remote host - **`docker.probe`**: Probes the target Docker's availability and version **Security & Approval** - **Compose Planner** (`DockerComposePlanner`): YAML parsing, complexity/resource-limit validation, blocker codes, and risk notices; preflight returns the impact scope before operations - **Container/resource creation preflight**: Returns the normalized request, risk notice, and impact before creation - **Resource deletion preflight**: Returns dependency relationships; executes only after confirmation - **Registry credentials** (`DockerRegistryCredentialRepository`): Private registry credentials stored encrypted; supports list/delete **IPC & Contracts** - IPC channels are declared centrally in `src/shared/ipcChannels.ts` (`IPC_INVOKE_CHANNELS` / event channels), guarded by the contract test `tests/__tests__/shared/ipcChannels.test.ts` to keep the preload whitelist consistent with main-process handlers - New repositories: `ManagedTargetRepository` (managed targets, bound to Docker endpoints), `DockerRegistryCredentialRepository` **UI** - `ContainerCenter` container hub (tabs: Containers / Images / Networks / Compose / Swarm) - `DockerExecWorkspace` / `DockerExecTerminal`: exec into container terminals - Various create/delete/env/image-pull dialogs, with accompanying ViewModels and unit tests --- ## Installation and Configuration Guide ### Requirements | Item | Requirement | |------|------| | Operating system | Windows 10 / 11 (x64) | | Node.js | 20+ (20.x LTS recommended) | | npm | 10+ | ### Quick Installation #### Option 1: Using the Installer (recommended for end users) 1. Get `FinalZero Setup 1.0.12.exe` from the `release/` directory 2. Double-click to run the installer 3. Choose the installation directory (customization supported) 4. After installation, FinalZero shortcuts will appear on the desktop and Start menu #### Option 2: Portable version 1. Go to the `release/win-unpacked/` directory 2. Run `FinalZero.exe` directly ### Development Environment Setup ```bash # 1. Clone the project git clone cd FinalZero # 2. Install dependencies npm install # 3. Start in dev mode (renderer hot reload + main process auto restart) npm run dev # 4. Production build and start npm start # 5. Compile only (main process + renderer process) npm run build # 6. Run unit tests npm test # 7. Package the Windows installer (output to release/) npm run package:win # 8. Package macOS DMG + ZIP (only executable on a real macOS) npm run package:mac ``` > **Native module note**: The project uses the `better-sqlite3-multiple-ciphers` native module, which depends on prebuilt binaries matching the Electron version. `package:mac` must be run on a real macOS with dependencies installed and native modules rebuilt; Windows cannot produce verifiable macOS artifacts. If you see `NODE_MODULE_VERSION` errors at startup after reinstalling dependencies, run: > > ```bash > npm run rebuild > ``` ### Configuration Files | Item | Location | Description | |--------|------|------| | Database file | `%APPDATA%\finalzero\finalzero.db` | SQLCipher 4 encrypted database | | App config | Managed by electron-store | Preferences such as theme, language, launch at startup | | App icon | `build/icon.ico` | Packaging icon resource | | Packaging config | `build` field in `package.json` | electron-builder configuration | --- ## Usage Examples ### Quick Start Workflow ``` 1. Launch the app └─ "Sessions" panel on the left 2. Create a session ├─ Right-click → "New Connection" ├─ Fill in: name, host, port, username ├─ Choose: protocol (SSH/SFTP/Telnet) └─ Choose: authentication (password / private key) 3. Connect to a server ├─ Single-click a session → view connection details └─ Double-click a session → opens a standalone terminal tab 4. Multi-server management ├─ Open multiple tabs simultaneously ├─ Tabs do not interfere with each other └─ Right-click a tab → rename / duplicate / set color / close 5. File management ├─ Click the "SFTP" icon on the left ├─ Upload / download / delete / rename └─ View progress and history in the transfer queue 6. Quick commands ├─ Click "Command Manager" ├─ Double-click a command → executes in the current terminal └─ Or use the quick command panel in the terminal sidebar 7. System settings └─ "Settings" → General / Appearance / Terminal / Network / Shortcuts / Logs / About ``` ### SSH Connection Example **Scenario**: Connecting to an Ubuntu server 1. Right-click in the session panel → **New Connection** 2. Fill in the form: | Field | Value | |------|----| | Name | `web-server-01` | | Protocol | SSH | | Host | `192.168.1.100` | | Port | `22` | | Username | `ubuntu` | | Authentication | Private key | | Private key | Select a local `.pem` file | | Group | Select the "Production" group | 3. Click **Save** → double-click the session to open a terminal 4. After a successful connection, the bottom status bar shows the server's CPU / memory / system info ### SFTP File Transfer Example **Scenario**: Uploading local files to a remote server ``` 1. After the terminal connection is established, click the "SFTP" icon on the left 2. The current connection name is shown at the top (to avoid confusing servers) 3. Left: local file list 4. Right: remote server file list 5. Select local files → click "Upload" 6. The transfer queue shows progress in real time: - Status: pending → transferring → completed - Supports: pause / resume / cancel 7. After the transfer completes → open the local file's folder with one click ``` ### Quick Command Example **Scenario**: Using built-in command templates to check server resources 1. In a terminal connection, open the quick command panel on the right 2. Select the "System Monitoring" category 3. Double-click `free -h` → the command runs automatically in the current terminal 4. Or define a custom command in "Command Manager": | Field | Value | |------|----| | Name | Check disk usage | | Command | `df -h --total` | | Description | Show disk usage of all mount points | | Group | System Monitoring | | Favorite | Yes | --- ## Version Information ### Current Version **v1.0.12 (2026-09-01)** — i18n validator dictionary key checking, translatable shortcut messages, AI Agent narrow-pane adaptive layout, English documentation - Enhanced the **i18n validator** (`check-renderer-i18n.cjs`, +84 lines): - Scan scope extended to `src/renderer/config/` - Loads `zhMessages` dictionary keys and verifies that all static `t('...')` call keys exist in the dictionary, reporting `missing zhMessages key` when missing - Refined findings sorting (file → line → text) - Made **shortcut validation messages translatable** (`shortcuts.ts`): hardcoded Chinese error messages replaced with translatable English source keys (`Invalid shortcut configuration` / `Shortcut already assigned: {shortcut}`), translated into Chinese via the dictionary ("快捷键配置无效" / "快捷键已被占用:{shortcut}") - Extended the **zhMessages dictionary**: `tasks` / `Read-only` / `Issues` / `Compose operation plan` / `CPU 18%` / `Region`, etc.; removed the duplicate `System` entry and relocated it to the theme section - Fixed the **AI Agent panel narrow-pane layout** (`AgentRunPanel` + `AiChat.css`): in narrow Inspector panes, the control row switches to single-column adaptive layout (model select / terminal select / run button full width); `popupMatchSelectWidth` prevents dropdown overflow - Added **English documentation** (`README_EN.md`): fully consistent with the Chinese `README.md` in content, structure, and layout; both versions link to each other at the top for language switching - Added tests: Chinese coverage for theme labels (6 themes), translatable shortcut validation messages **v1.0.11 (2026-08-31)** — Application theme expansion, terminal theme system, macOS packaging, full i18n coverage, TerserPlugin minification - Added **application theme expansion**: `ThemeType` extended from `dark/light/system` to 6 themes (new `ocean` / `graphite` / `sand`); data-driven `APP_THEME_OPTIONS`; `resolveApplicationTheme` resolves the system theme to a light/dark base; `isDarkApplicationTheme` predicate - Added **terminal theme system** (`TerminalThemeType`): 11 portable terminal color schemes (`default` / `dark` / `light` / `solarized-dark` / `solarized-light` / `monokai` / `dracula` / `nord` / `gruvbox-dark` / `one-dark` / `tokyo-night` / `high-contrast`); `default` follows the app theme's light/dark base - Added **terminal config parsing** (`appConfig.ts`): `parseStoredTerminalConfig` parses `lineHeight` / `letterSpacing` / `cursorStyle` / `cursorBlink` / `selectOnCopy` / `rightClickPaste` / `enableSuggestions` / `enableKeywordHighlight` / `enableActionLinks` / `showLineNumbers` / `showTimestamps` from the `app_config` table; `theme.ts` provides normalizers (`normalizeTerminalTheme` / `normalizeTerminalLineHeight` / `normalizeTerminalLetterSpacing` / `normalizeTerminalCursorStyle`) - Added **macOS packaging support**: `package:mac` script (platform check + build + rebuild + electron-builder `--mac`); electron-builder `mac` config (dmg + zip, `category: public.app-category.developer-tools`); added `build/icon.icns` / `build/icon.png` / `build/icon-source.png`; updated `build/icon.ico` (21KB → 82KB hi-res) - Added **full i18n coverage** (+528 lines): nearly all UI components internationalized (terminal / SFTP / commands / sessions / settings / monitoring / port forwarding / AI / audit / container exec / sync, etc.); added the `scripts/check-renderer-i18n.cjs` check script + `check:i18n` npm script to scan the renderer layer for hardcoded Chinese - Added **TerserPlugin production minification**: webpack production build enables `TerserPlugin` (`parallel: 4`), `minimize: isProduction` - Added **AppConfig type extensions**: `terminalTheme` changed from `string` to `TerminalThemeType`; new optional fields `lineHeight` / `letterSpacing` / `cursorStyle` / `cursorBlink` - Enhanced **design-system.css** (+302 lines): added ocean / graphite / sand theme styles and terminal theme variables - Refactored `TerminalView` (+132/-lines), `SftpPanel` (+210/-lines), `MonitorPanel` (+159/-lines), `TerminalSettings` (+353/-lines), `SessionTree` (+108/-lines), etc. to adopt the new themes and i18n - Added unit tests: `appConfig` / `theme` / `i18n` - README dev environment setup extended with macOS packaging steps and native module notes **v1.0.10 (2026-08-30)** — Audit log viewer, diagnostic log switch, RDP orphan profile cleanup, settings deep-link navigation - Added the **audit log viewer** (`AuditLogPanel` + `AuditHandlers`): query by action / level / time range / keyword, sorting, pagination; CSV export (UTF-8 BOM, with **CSV formula injection protection**, prefixing `'` to cells starting with `=` / `+` / `-` / `@` / `\t` / `\r`); new IPC `audit.query` / `audit.export`; `AuditLogRepository` rewrite (+394/-lines) - Added **audit log types** (`AuditLogEntry` / `AuditLogQuery` / `AuditLogQueryResult` / `AuditLogExportRequest` / `AuditLogExportResult` / `AuditLogLevel`); `SettingsCategory` adds `'audit'` - Added the **diagnostic log switch** (`SecureLogger.setEnabled`): ordinary diagnostic logs can be disabled without affecting security audit events; `LogsSettings` UI enhancements - Added **RDP orphan profile cleanup** (`RdpService.cleanupOrphanProfiles`): cleans up `finalzero-rdp-*.rdp` temp files older than 24h at startup, non-recursive, rejecting unrelated files - Added **settings deep-link navigation** (`settingsNavigation`): `requestSettingsCategory` / `consumeRequestedSettingsCategory` support jumping from other views to a specific settings subpage (e.g., audit logs, network) - Enhanced **CloudSyncService** (+173 lines): audit logs added to sync categories - Refactored **NetworkSettings** (+168/-lines) - Added unit tests: `AuditLogRepository` / `AuditHandlers` / `auditLogDetails` / `SecureLogger` / `RdpServiceCleanup` - i18n additions **v1.0.9 (2026-08-29)** — Container management (Docker), AI multimodal attachments, host key confirmation coordinator, recursive split layouts - Added **container management (Docker)**: a unified Docker ops workbench covering containers/images/networks/Compose/Swarm/dashboard/observability; local and remote (SSH tunnel) transports; Compose Planner preflight + create/delete preflight + approval flow; exec into container terminals; encrypted registry credential storage - Added **AI multimodal attachments** (`AiAttachmentService`): image (png/jpg/jpeg/webp/gif, ≤5MB) and text (256+ extensions, ≤256KB) attachments; up to 5 files / 10MB total; 10-minute TTL auto-release; new IPC `ai.attachments.pick` / `ai.attachments.release`; `AiService` multimodal tests - Added the **host key confirmation coordinator** (`HostKeyVerificationCoordinator`): bridges the ssh2 async `hostVerifier` callback to the renderer confirmation dialog and the known-hosts repository; reject / accept / remember actions; 60s timeout - Added the **recursive split layout** (`RecursiveSplitLayout`): a visual layout component for the terminal recursive split tree, complementing the v1.0.8 `splitLayoutStore` - Added **centralized IPC channel declarations** (`src/shared/ipcChannels.ts`): `IPC_INVOKE_CHANNELS` whitelist + event channels; the contract test `ipcChannels.test.ts` guards preload/main-process consistency - Added the **managed target repository** (`ManagedTargetRepository`): persistence for managed targets bound to Docker endpoints - Enhanced **AI chat**: session selection (`aiConversationSelection`), scroll management (`aiChatScroll`), attachment UI - Enhanced the **SSH service** (`SshService`): host key verification wired to the coordinator - Enhanced **preload**: 247 new lines of Docker / attachment / managed-target API bridging - Added `.qa/` to `.gitignore` - Added extensive unit tests: DockerHandlers / DockerService / DockerComposeAnalyzer / DockerComposePlanner / RemoteDockerTransport / NamedPipeDockerTransport / AiAttachmentService / AiServiceMultimodal / HostKeyVerificationCoordinator / ManagedTargetRepository / DockerRegistryCredentialRepository / ipcChannels / dockerComposeViewModel / dockerContainerCreateViewModel / dockerExecWorkspace / dockerObservabilityViewModel / dockerResourceCreateViewModel / dockerSwarmViewModel / aiChatScroll / aiConversationSelection - i18n additions of 480+ Chinese/English entries **v1.0.8 (2026-08-28)** — Remote file editor safe write, terminal split tree refactor, Inspector panel lazy loading - Added **remote file editor safe write** (`SftpSafeWrite`): version fingerprint (SHA-256 + size + mtime) detects same-length same-second modifications; conflict detection before writing, returning the remote's current content and version on conflict; the `force` option is only used after user confirmation, and a recovery copy is still created before overwrite; new IPC channels `sftp.readFileVersioned` / `sftp.safeWriteFile` - Added the **shared utility `remoteEditSafety`**: version comparison (`sameRemoteFileVersion`) + linear-complexity text diff summary (`buildTextDiffSummary`, only expanding changed blocks between the common head/tail, avoiding O(n²) LCS on 2MB text) - Refactored the **terminal split tree** (`splitLayoutStore`): recursive split tree (horizontal / vertical, ratio 0.15~0.85), up to 12 panes; tree nodes use stable ids, so existing terminals are not remounted when adjusting ratios or nesting further; `TerminalTabs` is the sole writer; command/AI panels only read the currently alive `streamId` for a connection - Enhanced the **terminal tab bar** (`TerminalTabs`): adapted to the new split tree; old ids are not reused after a pane closes - Added **Inspector panel lazy loading** (`lazyWorkspacePanels`): `React.lazy` splits the AI / SFTP / Monitor panels into separate chunks (`panel-ai` / `panel-sftp` / `panel-monitor`), with `DeferredWorkspacePanel` Suspense fallback, reducing the initial bundle size - Enhanced **Webpack splitting**: `chunkFilename: chunks/[name].[contenthash:8].js` + production build `clean` option, removing stale dev hot-update artifacts - Added unit tests: `sftpSafeEdit` (main process), `splitLayoutStore` (renderer), `remoteEditSafety` (shared) - Other: SftpService / SftpHandlers extend versioned read/write; RemoteFileEditor conflict UI; i18n additions of 20+ entries; style enhancements - Verification: 23/23 test suites pass; production build passes **v1.0.7 (2026-08-27)** — WorkspaceShell workspace shell, Electron native module toolchain - Added the **WorkspaceShell workspace shell**: rebuilt the main UI skeleton based on the Navop competitive analysis; removed the fixed 44px top workspace panel, handing navigation to IconSidebar and connection status to terminal tabs and StatusBar, giving business pages full vertical space - Added the **resumable home WorkspaceHome**: single-column layout showing resumable task entries; connection-type views degrade back to the connections page after restart instead of faking restored sessions - Added the **unified Inspector workspace panel** (`WorkspaceInspector`): reuses the command / AI / remote file / monitor business panels; supports tab switching, collapsing, and 300–560px drag-width memory; docks on wide screens, right overlay on medium screens, bottom sheet at 800px minimum window - Added **adaptive sidebar behavior**: Sidebar supports `auto` / `dock` / `overlay` behaviors; narrow screens force overlay + scrim + Escape to close + persisted open state, no longer squeezing the main workspace - Added **workspace preferences persistence** (`workspacePreferences`): lastView / inspector / sidebar config written to localStorage - Added UI action `SET_SIDEBAR_COLLAPSED`: programmatically collapse the sidebar - Added the **Electron native module toolchain** (FZ-NV-001): `.nvmrc` pins the Node version; `scripts/run-jest-electron.cjs` runs tests under the Electron ABI; `scripts/verify-electron-native.cjs` self-checks by actually loading SQLite / pty / Serial bindings; `postinstall` hook automatically rebuilds native modules; `rebuild:electron` split out; `verify:native` added; `package` / `package:win` / `pack:dir` all include the rebuild step - Added **ESLint config**: `.eslintrc.cjs` + `eslint-plugin-react-hooks` rules - Added the **competitive analysis doc**: `docs/Navop-Comparison-and-Improvement-Plan.md`; `docs/v1.2-Sprint-Plan.md` old sprint marked as historical - Added unit test `tests/__tests__/renderer/workspacePreferences.test.ts`; database tests adapted to the Electron test environment - Other: MonitorPanel / SftpPanel / AiPanel / AiChat.css detail enhancements; i18n additions of 45+ entries; SessionConfig serial comments corrected (no longer marked "planned") - Verification: 20/20 test suites, 298/298 cases pass; production build passes; lint 0 errors / 62 recorded historical warnings; Electron 28.3.3 / Node 18.18.2 / ABI 119 native module self-check passes **v1.0.6 (2026-08-15)** — AI multi-model & streaming reasoning, cloud sync categories, SQL log redaction - Added **AI multi-model selection**: Ask / Agent chat UIs support switching between enabled models (provider enabled + model enabled), resolving the default by the `isDefault` flag with legacy-data compatibility fallback - Added **AI streaming response + reasoning separation**: streaming output distinguishes `content` / `reasoning` kinds; the provider's reasoning process and the final answer are stored and displayed separately - Added **AI Markdown rendering**: renders GFM Markdown based on `react-markdown` + `remark-gfm`, with one-click code block copy - Added the **AI thinking panel** (`ThinkingPanel`): collapsed display of reasoning content and Agent thought chains, with a streaming loading animation - Added **terminal context injection** (`terminalContextStore` + `AiTerminalContext`): registers active terminal output readers so AI can use recent terminal output as context; the main process re-limits length and sanitizes - Added **cloud sync category selection**: 10 independently selectable data domains (settings / connections / groups / history / commands / credentials / aiConfig / aiHistory / fileTransfers / auditLogs), with auditLogs unchecked by default - Added **remote wipe** (`sync.clearRemote` IPC): clears remote sync data with one click - Added **SQL log redaction** (`sqlLogRedaction`): automatically detects SQL statements containing password / passphrase / private_key / api_key_enc / proxy_password / `PRAGMA key` and redacts them, preventing credential leakage into dev logs - Build: Webpack renderer enables `conditionNames: ['browser', 'import', 'default']`, fixing ESM export issues for `react-markdown` / `vfile` in the renderer (nodeIntegration disabled) - New dependencies: `react-markdown` ^10.1.0, `remark-gfm` ^4.0.1 - Added 9 unit tests: AiProviderRepository seed, sqlLogRedaction, AiModelSelect, syncCategorySettings, syncDisplay, terminalContextStore, AiModelResolver, AiServiceStream, CloudSyncService - i18n expansion: AI model selection, thinking process, sync categories, and other Chinese/English entries - Cleanup: removed the unrelated binary `mojian-blog.jar` **v1.0.5 (2026-08-15)** — AI assistant, Cloud Sync, and terminal enhancements - Added **AI assistant - Ask mode**: conversational Q&A generating Shell commands from natural language; automatic risk labeling (safe / caution / dangerous) with required double confirmation; context memory and session isolation - Added **AI assistant - Agent mode**: ReAct (Reason + Act) loop-based autonomous multi-step execution; step-by-step display of the thought process and tool calls; critical operations (write, delete, modify, remote execution) go through the approval flow, with abort and rollback preview - Added **Cloud Sync**: WebDAV and S3-compatible protocols; encrypted multi-device config sync (AES-256-GCM field-level encryption); conflict detection and resolution strategies (last-writer-wins / manual-merge) - Added the **terminal line number / timestamp gutter**: independent left column showing logical line numbers and per-line arrival time with synchronized scrolling; individually toggleable in Terminal Settings - Added **terminal keyword highlighting**: lightweight highlighting based on xterm decorations; built-in rules cover error / warn / success / info / debug, dates and times, URLs, UUIDs, version numbers, prompts, etc. - Added **terminal action links**: automatically recognizes IPv4, `host:port`, and archive names, rendering them as clickable links (copy / copy & download / copy host port) - Added the **AI settings panel** (`AiSettings`): provider configuration (OpenAI / Azure / Ollama / custom BaseURL), model selection, temperature, max tokens, Ask risk rule toggle - Added the **sync settings panel** (`SyncSettings`): protocol selection, endpoint / credentials / bucket, auto-sync interval, conflict resolution strategy - New IPC channels: `ai.*`, `ai.agent.*`, `sync.*`; new repositories `AiProviderRepository` / `AiConversationRepository` / `AgentRunRepository` - New design docs: `docs/AI-Agent-Mode-Design.md`, `docs/AI-Assistant-Ask-Mode-Design.md`, `docs/Nyaterm-Comparison-Analysis.md` - New unit test: `tests/__tests__/shared/aiRiskRules.test.ts` (risk rule matching) - i18n expansion: AI assistant, Cloud Sync, and terminal enhancement Chinese/English entries **v1.0.4 (2026-08-15)** — RDP / VNC remote desktop, directory sync, and security lock - Added **RDP remote desktop**: invokes the system `mstsc.exe` standalone window; supports domain / screen mode / NLA network-level authentication; credentials are not written to config files - Added **VNC remote desktop**: standalone `VncPanel` tab rendered by noVNC - Added **directory sync (DirSync)**: remote ⇄ local bidirectional sync with difference preview and execution result summary - Added **SFTP packed download**: multi-select remote files / directories and pack them for download with one click - Added the **remote file editor**: read and write remote text files directly via `sftp.readFile / writeFile` - Added the **Master Password Lock**: master password + auto-lock timeout + failed-attempt lockout + lock overlay - Completed **port forwarding**: `forward.create / stop / delete / list`, with ForwardInfo showing the actual port, running status, and autoStart - Added **SSH Agent authentication** and **WOL wake-on-LAN** (`wol.send`) - Protocol type expansion: RDP, VNC, WSL, Local Shell (`local`) officially available; serial service (SerialService) framework ready - New IPC channels: command history (`commandHistory.*`), shortcuts (ShortcutCommand / ShortcutMap), security lock (`lock.*`), etc. - Telnet service enhancements; session repository and connection manager extensions - ~90 new Chinese/English i18n entries (directory sync, packed download, RDP/VNC config, jump host, authentication methods, etc.) **v1.0.3 (2026-08-15)** — Connection management view and new-connection dialog refactor - Added the **connection management view** (app default home): selecting a session shows a connection property card (host / port / username / auth / key / tags) and quick command chips (single-click to execute) - Added **search & filtering**: search by connection name, host, or tag; "All / Not connected" status filters - Added the **connection toolbar**: open terminal / disconnect / edit / delete one-click actions - Refactored the **new/edit connection dialog** (new-connection-v3 design): - "Test Connection" button to verify reachability and authentication before saving - "Duplicate Connection" feature - Connection tags (tags) and session notes (note) - **Jump Host configuration**: when enabled, an SSH tunnel is established through the jump host - **Startup commands executed after connect** (startupCommand, one per line) - Terminal **cursor style** (block / bar / underline) and **line height** settings - Serial config fields (serialPort / baudRate, planned) - New `local` protocol type (Local Shell) - Sidebar and icon bar layout refactor with a new "Connection Management" entry; default active view changed to `connections` - 80+ new Chinese/English i18n entries **v1.0.2 (2026-08-14)** — Phase two enhancements and Zmodem fixes - Added the **Quick Connect** bar (`user@host[:port]` format): connect with one click without saving a session, optionally saving it as a formal session after success - Added the **New Connection** button (sidebar shows "Quick Connect / New Connection / New Group" side by side) - Added **Zmodem file transfer** (rz / sz): protocol byte interception, file picker dialog, progress status bar, terminal auto-recovery after transfer - Added **terminal split panes**: 1×1 / 1×2 / 2×1 / 2×2 layouts, each pane rendering an independent terminal with an independent shell stream - Added **command history**: isolated per session, ↑/↓ recall, persistent storage - Added **session templates**: save existing sessions as templates; new sessions inherit default configuration (excluding sensitive info) - Added **batch execution / broadcast**: multi-select sessions to run commands in batch or broadcast input - **Quick Connect smart credential reuse**: when a saved session with the same host+port+username is detected, its authentication credentials, jump host, and proxy settings are reused automatically - Improved Monitor panel responsiveness: ResizeObserver fixes chart sizing after maximize / restore - **Zmodem protocol robustness fixes**: ZRINIT retry header handling, ZNAK header capture, keepalive no longer overwriting handlers, lossless binary data encoding - **SFTP channel cache reuse**: avoids frequently opening channels that trigger the server's MaxSessions limit **v1.0.1 (2026-08-12)** — Phase one fixes and enhancements - Added the port forwarding management UI (local/remote/dynamic forwarding, shown with the connection lifecycle) - Added terminal Ctrl+F search (highlight, case sensitivity, regex, navigation) - Added shortcut settings (configurable, conflict detection, reset to defaults) - Added a global network proxy (HTTP / SOCKS4 / SOCKS5), overridable per session - Added the Master Password Lock (auto-lock, max failed attempts, lock overlay) - WSL sessions switched to real `wsl.exe` sessions; RDP/VNC/Serial marked "planned" with creation disabled **v1.0.0 (2026-08)** — First complete release ### Versioning Rules Follows semantic versioning (SemVer): ```text MAJOR.MINOR.PATCH ``` | Segment | Meaning | |--------|------| | Major | Major architecture changes or breaking changes | | Minor | New features (backward compatible) | | Patch | Bug fixes and minor improvements | ### Changelog #### v1.0.12 (2026-09-01) > i18n validator dictionary key checking, translatable shortcut messages, AI Agent narrow-pane adaptive layout, English documentation **✨ New Features** - **English documentation** (`README_EN.md`): fully consistent with the Chinese `README.md` in content, structure, and layout; both versions link to each other at the top (`简体中文 | English`) for language switching - **i18n validator enhancements** (`scripts/check-renderer-i18n.cjs`, +84 lines): - Scan scope extended to `src/renderer/config/` - Parses `zhMessages` dictionary keys from `i18n/index.tsx` - Verifies that all static `t('...')` call keys exist in the dictionary, reporting `missing zhMessages key: ` when missing - Refined findings sorting (file → line → text) **🔨 Refactoring & Enhancements** - **Translatable shortcut validation messages** (`src/renderer/config/shortcuts.ts`): - Hardcoded Chinese error messages replaced with translatable English source keys - `缺少 ${cmd} 的快捷键` → `Invalid shortcut configuration` (invalid shortcut configuration) - `${combo} 已被 ${prev} 与 ${cmd} 重复绑定` → `Shortcut already assigned: {shortcut}` (shortcut already assigned: {shortcut}) - **zhMessages dictionary additions**: `tasks` (tasks) / `Read-only` / `Issues` / `Compose operation plan` / `CPU 18%` / `Region`; removed the duplicate `System` entry and relocated it to the theme section - **AI Agent panel narrow-pane layout fix** (`AgentRunPanel` + `AiChat.css`): - In the narrow Inspector pane (`.ai-panel-root--inspector`), the control row switches to single-column adaptive layout - Model select / terminal select / run button full width (`ai-composer-control` / `ai-agent-run-action`) - `popupMatchSelectWidth` prevents the dropdown menu from overflowing its container; control row `min-width: 0` prevents grid overflow **📚 Tests** - Added tests: Chinese coverage for app theme labels (Light/Dark/System/Ocean/Graphite/Sand → 浅色/深色/系统/海洋/石墨/沙砾) - Added tests: translatable shortcut validation messages (`Invalid shortcut configuration`, `Shortcut already assigned: {shortcut}`) **📦 Installer Packages** - Windows: `FinalZero Setup 1.0.12.exe` - macOS: `FinalZero-1.0.12.dmg` / `FinalZero-1.0.12-mac.zip` (must be built on macOS) #### v1.0.11 (2026-08-31) > Application theme expansion, terminal theme system, macOS packaging, full i18n coverage, TerserPlugin minification **✨ New Features** - **Application theme expansion**: `ThemeType` extended from `dark/light/system` to 6 themes (new `ocean` / `graphite` / `sand`) - Data-driven `APP_THEME_OPTIONS`, shared by Settings and layout - `resolveApplicationTheme` resolves the `system` theme to the current system light/dark base - `isDarkApplicationTheme` determines theme lightness/darkness - **Terminal theme system** (`TerminalThemeType`): 11 portable terminal color schemes - `default` / `dark` / `light` / `solarized-dark` / `solarized-light` / `monokai` / `dracula` / `nord` / `gruvbox-dark` / `one-dark` / `tokyo-night` / `high-contrast` - `default` follows the app theme's light/dark base - **Terminal config parsing** (`src/renderer/config/appConfig.ts`): `parseStoredTerminalConfig` parses `lineHeight` / `letterSpacing` / `cursorStyle` / `cursorBlink` / `selectOnCopy` / `rightClickPaste` / `enableSuggestions` / `enableKeywordHighlight` / `enableActionLinks` / `showLineNumbers` / `showTimestamps` from the `app_config` table - `src/renderer/config/theme.ts` provides normalizers: `normalizeTerminalTheme` / `normalizeTerminalLineHeight` / `normalizeTerminalLetterSpacing` / `normalizeTerminalCursorStyle` - **macOS packaging support**: - `package:mac` script (platform check + build + rebuild + electron-builder `--mac`) - electron-builder `mac` config (dmg + zip, `category: public.app-category.developer-tools`) - Added `build/icon.icns` / `build/icon.png` / `build/icon-source.png`; updated `build/icon.ico` (hi-res) - **Full i18n coverage** (+528 lines): nearly all UI components internationalized - Added the `scripts/check-renderer-i18n.cjs` check script + `check:i18n` npm script, scanning the renderer layer for hardcoded Chinese **🔌 API & Type Changes** - `ThemeType` extension: `'dark' | 'light' | 'system'` → new `'ocean' | 'graphite' | 'sand'` - Added `TerminalThemeType` (11 values) - `AppConfig.terminalTheme` changed from `string` to `TerminalThemeType` - `AppConfig` new optional fields: `lineHeight` / `letterSpacing` / `cursorStyle` (`'block' | 'underline' | 'bar'`) / `cursorBlink` **🔨 Build & Refactoring** - **TerserPlugin production minification**: webpack production build enables `TerserPlugin` (`parallel: 4`), `minimize: isProduction`; new devDependency `terser-webpack-plugin@5.3.14` - Enhanced `design-system.css` (+302 lines): ocean / graphite / sand theme styles and terminal theme variables - Refactored for the new themes and i18n: `TerminalView` (+132/-lines), `SftpPanel` (+210/-lines), `MonitorPanel` (+159/-lines), `TerminalSettings` (+353/-lines), `SessionTree` (+108/-lines), `AppearanceSettings` (+111/-lines), `GeneralSettings` (+87/-lines), etc. **📚 Tests** - Added unit tests: `appConfig` / `theme` / `i18n` **📦 Installer Packages** - Windows: `FinalZero Setup 1.0.11.exe` - macOS: `FinalZero-1.0.11.dmg` / `FinalZero-1.0.11-mac.zip` (must be built on macOS) #### v1.0.10 (2026-08-30) > Audit log viewer, diagnostic log switch, RDP orphan profile cleanup, settings deep-link navigation **✨ New Features** - **Audit log viewer** (`AuditLogPanel` + `AuditHandlers`): - Query by action / level / time range / keyword, sorting, pagination - CSV export (UTF-8 BOM, with **CSV formula injection protection**, prefixing `'` to cells starting with `=` / `+` / `-` / `@` / `\t` / `\r`) - Export cap of 10000 rows, 100 rows per page - New IPC `audit.query` / `audit.export` - `AuditLogRepository` rewrite (+394/-lines) - **Diagnostic log switch** (`SecureLogger.setEnabled`): ordinary diagnostic logs can be disabled without affecting security audit events - **RDP orphan profile cleanup** (`RdpService.cleanupOrphanProfiles`): cleans up `finalzero-rdp-*.rdp` temp files older than 24h at startup, non-recursive, rejecting unrelated files - **Settings deep-link navigation** (`settingsNavigation`): `requestSettingsCategory` / `consumeRequestedSettingsCategory` support jumping from other views to a specific settings subpage **🔌 API Changes** - New IPC: `audit.query`, `audit.export` - New shared types: `AuditLogEntry`, `AuditLogQuery`, `AuditLogQueryResult`, `AuditLogExportRequest`, `AuditLogExportResult`, `AuditLogLevel` - `SettingsCategory` adds `'audit'` **🔨 Refactoring & Enhancements** - `AuditLogRepository` rewrite (query / export / actionTypes aggregation) - `CloudSyncService` enhancement (+173 lines): audit logs added to sync categories - `NetworkSettings` refactor (+168/-lines) - `LogsSettings` UI enhancement (diagnostic log switch) - `SecureLogger` adds an `enabled` field and the `setEnabled` method **📚 Tests** - Added unit tests: `AuditLogRepository`, `AuditHandlers`, `auditLogDetails`, `SecureLogger`, `RdpServiceCleanup` **🌐 Internationalization** - i18n additions for audit logs, diagnostic logs, and other Chinese/English entries **📦 Installer Packages** - `FinalZero Setup 1.0.10.exe` #### v1.0.9 (2026-08-29) > Container management (Docker), AI multimodal attachments, host key confirmation coordinator, recursive split layouts **✨ New Features** - **Container management (Docker)**: - Unified Docker ops workbench `ContainerCenter` with tabs covering containers / images / networks / Compose / Swarm - Containers: list / details / start-stop / restart / delete / create (preflight) / exec into terminal (`DockerExecWorkspace` / `DockerExecTerminal`) - Images: list / pull (with cancel and progress stream) - Networks: list; Swarm: stack list - Compose: project list / YAML preview / up-down-restart operation preflight and impact assessment - Dashboard `docker.dashboard` aggregated statistics; observability `docker.observability.subscribe` real-time events and stats subscription stream - **Local transport**: connects directly to the local Docker Engine (named pipe / unix socket) - **Remote transport** (`RemoteDockerTransport`): bridges an existing SSH connection's ssh2 channel into a Node HTTP socket, reusing `DockerServicePool` — no extra ports need to be opened on the remote host - `docker.probe` probes the target's availability and version - **AI multimodal attachments** (`AiAttachmentService`): - Image (png/jpg/jpeg/webp/gif, ≤5MB) and text (256+ extensions, ≤256KB) attachments - Up to 5 files / 10MB total; 10-minute TTL auto-release - New IPC `ai.attachments.pick` / `ai.attachments.release` - **Host key confirmation coordinator** (`HostKeyVerificationCoordinator`): bridges the ssh2 async `hostVerifier` callback to the renderer confirmation dialog and the known-hosts repository; reject / accept / remember actions; 60s timeout - **Recursive split layout** (`RecursiveSplitLayout`): a visual layout component for the terminal recursive split tree, complementing the v1.0.8 `splitLayoutStore` - **Managed target repository** (`ManagedTargetRepository`): persistence for managed targets bound to Docker endpoints **🛡️ Security & Approval** - **Compose Planner** (`DockerComposePlanner`): YAML parsing, complexity/resource-limit validation, blocker codes, and risk notices; preflight returns the impact scope before operations - Container/resource creation preflight: returns the normalized request, risk notice, and impact - Resource deletion preflight: returns dependency relationships; executes only after confirmation - Registry credentials (`DockerRegistryCredentialRepository`): private registry credentials stored encrypted; supports list / delete **🔌 API Changes** - Added **centralized IPC channel declarations** (`src/shared/ipcChannels.ts`): `IPC_INVOKE_CHANNELS` whitelist + event channels; the contract test `ipcChannels.test.ts` guards preload/main-process consistency - New IPC: `docker.*` (container / image / network / compose / swarm / dashboard / observability / probe / registry), `ai.attachments.pick` / `ai.attachments.release` - New repositories: `ManagedTargetRepository`, `DockerRegistryCredentialRepository` - preload adds 247 lines of Docker / attachment / managed-target API bridging - SSH `hostVerifier` wired to `HostKeyVerificationCoordinator` **🔨 Refactoring & Enhancements** - AI chat: session selection (`aiConversationSelection`), scroll management (`aiChatScroll`), attachment UI - `AiSettings` / `AiModelSelect` / `AiPanel` / `AgentRunPanel` enhancements - `SshService` host key verification wired to the coordinator - `.gitignore` adds `.qa/` **📚 Tests** - Added extensive unit tests: DockerHandlers / DockerService / DockerComposeAnalyzer / DockerComposePlanner / RemoteDockerTransport / NamedPipeDockerTransport / AiAttachmentService / AiServiceMultimodal / HostKeyVerificationCoordinator / ManagedTargetRepository / DockerRegistryCredentialRepository / ipcChannels / dockerComposeViewModel / dockerContainerCreateViewModel / dockerExecWorkspace / dockerObservabilityViewModel / dockerResourceCreateViewModel / dockerSwarmViewModel / aiChatScroll / aiConversationSelection **🌐 Internationalization** - i18n additions of 480+ Chinese/English entries **📦 Installer Packages** - `FinalZero Setup 1.0.9.exe` #### v1.0.8 (2026-08-28) > Remote file editor safe write, terminal split tree refactor, Inspector panel lazy loading **✨ New Features** - **Remote file editor safe write** (`SftpSafeWrite`): - Version fingerprint (SHA-256 + size + mtime) detects same-length same-second modifications, avoiding silently overwriting others' changes - Conflict detection before writing: on conflict, returns the remote's current content and version (`status: 'conflict'`) for the frontend to display a diff - The `force` option is only used after user confirmation; a recovery copy (`backupPath`) is still created before overwrite - On success, returns the new version fingerprint and backup path (`status: 'saved'`) - **Shared utility `remoteEditSafety`**: - `sameRemoteFileVersion` version comparison - `buildTextDiffSummary` linear-complexity text diff summary (only expanding changed blocks between the common head/tail, avoiding O(n²) LCS on 2MB text) **🔨 Refactoring & Enhancements** - **Terminal split tree refactor** (`splitLayoutStore`): - Recursive split tree (horizontal / vertical, ratio 0.15~0.85), up to 12 panes - Tree nodes use stable ids; existing terminals are not remounted when adjusting ratios or nesting further - `TerminalTabs` is the sole writer; command / AI panels only read the currently alive `streamId` for a connection - **Terminal tab bar** (`TerminalTabs`): adapted to the new split tree; old ids are not reused after a pane closes - **Inspector panel lazy loading** (`lazyWorkspacePanels`): `React.lazy` splits the AI / SFTP / Monitor panels into separate chunks (`panel-ai` / `panel-sftp` / `panel-monitor`), with `DeferredWorkspacePanel` Suspense fallback, reducing the initial bundle size - **Webpack splitting**: `chunkFilename: chunks/[name].[contenthash:8].js` + production build `clean` option, removing stale dev hot-update artifacts **🔌 API Changes** - New IPC channels: `sftp.readFileVersioned` (returns `SftpVersionedFile`), `sftp.safeWriteFile` (request `SftpSafeWriteRequest`, returns `SftpSafeWriteResult`) - New shared types: `SftpFileVersion`, `SftpVersionedFile`, `SftpSafeWriteRequest`, `SftpSafeWriteResult` **📚 Tests** - Added unit tests: `tests/__tests__/main/sftpSafeEdit.test.ts`, `tests/__tests__/renderer/splitLayoutStore.test.ts`, `tests/__tests__/shared/remoteEditSafety.test.ts` **🔧 Miscellaneous** - SftpService / SftpHandlers implement versioned read/write - RemoteFileEditor conflict UI and diff display - i18n additions of 20+ Chinese/English entries; style enhancements **✅ Verification** - 23/23 test suites pass - Production build passes (chunk splitting and clean enabled) **📦 Installer Packages** - `FinalZero Setup 1.0.8.exe` #### v1.0.7 (2026-08-27) > WorkspaceShell workspace shell, Electron native module toolchain **✨ New Features** - **WorkspaceShell workspace shell**: rebuilt the main UI skeleton based on the Navop competitive analysis; removed the fixed 44px top workspace panel, handing navigation to IconSidebar and connection status to terminal tabs and StatusBar, giving business pages full vertical space - **Resumable home WorkspaceHome**: single-column layout showing resumable task entries; connection-type views degrade back to the connections page after restart instead of faking restored sessions (safe-view and non-sensitive layout preference restoration) - **Unified Inspector workspace panel** (`WorkspaceInspector`): reuses the command / AI / remote file / monitor business panels; supports tab switching, collapsing, and 300–560px drag-width memory; docks on wide screens, right overlay on medium screens, bottom sheet at 800px minimum window - **Adaptive sidebar behavior**: Sidebar supports `auto` / `dock` / `overlay` behaviors; narrow screens force overlay + scrim + Escape to close + persisted open state, no longer squeezing the main workspace - **Workspace preferences persistence** (`workspacePreferences`): lastView / inspector / sidebar config written to localStorage (key `finalzero.workspace.preferences.v1`) - Added UI action `SET_SIDEBAR_COLLAPSED`: programmatically collapse the sidebar **🔨 Build & Toolchain** - **Electron native module toolchain** (FZ-NV-001): - `.nvmrc` pins the Node version - `scripts/run-jest-electron.cjs`: tests uniformly run under the Electron ABI (`--runInBand`) - `scripts/verify-electron-native.cjs`: self-check by actually loading the SQLite / pty / Serial bindings native modules - `postinstall` hook automatically rebuilds native modules; `rebuild:electron` split out; `verify:native` added - `package` / `package:win` / `pack:dir` all include the rebuild step; install/packaging only rebuilds the ABI-sensitive SQLite - **ESLint config**: `.eslintrc.cjs` + `eslint-plugin-react-hooks` ^4.6.2 rules **🔌 API Changes** - New UI action `SET_SIDEBAR_COLLAPSED` (payload: boolean) - New `WorkspacePreferences` type and `finalzero.workspace.preferences.v1` localStorage persistence **📚 Documentation & Tests** - Added the competitive analysis doc `docs/Navop-Comparison-and-Improvement-Plan.md`; `docs/v1.2-Sprint-Plan.md` old sprint marked as historical - Added unit test `tests/__tests__/renderer/workspacePreferences.test.ts` - Database tests (`Database.test.ts` / `SessionRepository.test.ts`) adapted to the Electron test environment - `SessionConfig` serial comments corrected (no longer marked "planned") **🔧 Miscellaneous** - MonitorPanel / SftpPanel / AiPanel / AiChat.css detail enhancements - i18n additions of 45+ Chinese/English entries **✅ Verification** - 20/20 test suites, 298/298 cases pass - Production build passes; lint 0 errors / 62 recorded historical warnings - Electron 28.3.3 / Node 18.18.2 / ABI 119 native module self-check passes - Real windows at 1188×794 and 788×644 verified for sidebar dock/overlay, scrim, Escape, and the home single-column layout **📦 Installer Packages** - `FinalZero Setup 1.0.7.exe` #### v1.0.6 (2026-08-15) > AI multi-model & streaming reasoning, cloud sync categories, SQL log redaction **✨ New Features** - **AI multi-model selection**: Ask / Agent chat UIs can switch between enabled models; new `AiModelSelect` component and `AiModelResolver` service, default resolved by the `isDefault` flag, with legacy-data `configuredModelId` compatibility fallback - **AI streaming response + reasoning separation**: new `AiStreamDelta` (kind: `content` / `reasoning`); `AiMessage` / `AiStreamDone` add a `reasoningContent` field, storing the reasoning process and the final answer separately - **AI Markdown rendering**: renders GFM Markdown based on `react-markdown` + `remark-gfm` with one-click code block copy (`MarkdownMessage` component + `AiChat.css`) - **AI thinking panel** (`ThinkingPanel`): collapsed display of provider reasoning content and Agent execution thought chains, with a streaming loading animation - **Terminal context injection**: `terminalContextStore` registers active terminal output readers; `AiChatRequest` / `AiAgentStartRequest` add a `terminalContext` field; the main process re-limits length and sanitizes before forwarding to the provider - **Cloud sync category selection**: new `SyncCategory` (10 data domains: settings / connections / groups / history / commands / credentials / aiConfig / aiHistory / fileTransfers / auditLogs); `DEFAULT_SYNC_CATEGORIES` leaves auditLogs unchecked by default; `CloudSyncSettings.categories` field; `syncCategorySettings` utility function - **Remote wipe**: new `sync.clearRemote` IPC channel clears remote sync data with one click - **Sync display enhancement**: `syncDisplay` timestamp formatting (local timezone, no locale separators) **🛡️ Security Enhancements** - **SQL log redaction** (`sqlLogRedaction`): automatically detects SQL statements containing `password` / `passphrase` / `private_key` / `api_key_enc` / `proxy_password` / `PRAGMA key` and replaces them with `[REDACTED sensitive SQL]` in dev logs, preventing credential leakage **🔌 API Changes** - New IPC channel: `sync.clearRemote` - `AiChatRequest` / `AiAgentStartRequest` add a `modelId` field (model selection) - `AiChatRequest` adds a `terminalContext: AiTerminalContext` field - New streaming event `AiStreamDelta` (kind: `content` / `reasoning`) - `AiMessage` / `AiStreamDone` add a `reasoningContent` field - `CloudSyncSettings` adds a `categories: SyncCategorySelection` field - New shared constants: `SYNC_CATEGORY_KEYS`, `DEFAULT_SYNC_CATEGORIES`, and the `SyncCategory`, `SyncCategorySelection` types **🔨 Build** - Webpack renderer enables `conditionNames: ['browser', 'import', 'default']`, fixing ESM export issues for `react-markdown` / `vfile` in the renderer (nodeIntegration disabled) **📚 Tests** - Added 9 unit tests: AiProviderRepository seed, sqlLogRedaction, AiModelSelect, syncCategorySettings, syncDisplay, terminalContextStore, AiModelResolver, AiServiceStream, CloudSyncService **🌐 Internationalization** - Added AI model selection, thinking process, sync categories, and other Chinese/English entries **📦 Dependencies** - Added `react-markdown` ^10.1.0, `remark-gfm` ^4.0.1 **🧹 Cleanup** - Removed the unrelated binary `mojian-blog.jar` **📦 Installer Packages** - `FinalZero Setup 1.0.6.exe` #### v1.0.5 (2026-08-15) > AI assistant, Cloud Sync, and terminal enhancements **✨ New Features** - **AI assistant - Ask mode**: generates Shell commands from natural language; automatic risk labeling (safe / caution / dangerous), `dangerous` forces double confirmation; context memory and session isolation - **AI assistant - Agent mode**: ReAct (Reason + Act) based autonomous multi-step execution; thought chain + tool call visualization; write / delete / modify / remote execution and other sensitive operations go through the approval flow, with mid-course abort and rollback preview - **Cloud Sync**: WebDAV and S3-compatible protocols; encrypted multi-device config sync (AES-256-GCM field-level encryption, key derived from the master password); conflict detection and resolution strategies (`last-writer-wins` / `manual-merge`) - **Terminal line number / timestamp gutter**: independent left column rendering logical line numbers and arrival timestamps with synchronized scrolling; individually toggleable via `showLineNumbers` / `showTimestamps` in Terminal Settings - **Terminal keyword highlighting**: lightweight highlighting based on the xterm `Decoration` API, scanning complete lines and anchoring markers (preserved after scrollback trimming); built-in rules cover error / warn / success / info / debug, date-time, URLs, UUIDs, version numbers, shell prompts - **Terminal action links**: automatically recognizes IPv4, `host:port`, and archive file names (`.tar.*` / `.zip` / `.7z`, etc.), rendering them as clickable links with copy / download / copy host port - **AI settings panel**: provider selection (OpenAI / Azure / Ollama / custom BaseURL), model, temperature, max tokens, Ask risk rule toggle - **Sync settings panel**: protocol, endpoint, credentials, bucket / path, auto-sync interval, conflict resolution strategy **🔌 API Changes** - New IPC channels: `ai.chat / ai.cancel / ai.providers.*`, `ai.agent.start / step / approve / cancel`, `sync.settings.* / sync.now / sync.status` - New database repositories: `AiProviderRepository`, `AiConversationRepository`, `AgentRunRepository` (persisting Agent execution records) - New `shared/aiRiskRules.ts` (shared risk rules) and AI / Sync type extensions in `shared/types/index.ts` **🛡️ Security Enhancements** - Cloud Sync credentials (WebDAV password, S3 SecretKey) stored with field-level AES-256-GCM encryption - Full audit logging of Agent-sensitive operations for post-hoc traceability **📚 Documentation** - Added design docs: `docs/AI-Agent-Mode-Design.md`, `docs/AI-Assistant-Ask-Mode-Design.md`, `docs/Nyaterm-Comparison-Analysis.md` - Added unit test: `tests/__tests__/shared/aiRiskRules.test.ts` - README extended with the AI assistant and Cloud Sync sections, plus usage examples **🌐 Internationalization** - Added AI assistant, Cloud Sync, and terminal enhancement Chinese/English entries **📦 Installer Packages** - `FinalZero Setup 1.0.5.exe` #### v1.0.4 (2026-08-15) > RDP / VNC remote desktop, directory sync, security lock, and protocol matrix expansion **✨ New Features** - **RDP remote desktop**: hosted in the system `mstsc.exe` standalone window; supports domain, screen mode (window / fullscreen), and NLA network-level authentication; credentials entered interactively in the system window, not written to config files - **VNC remote desktop**: standalone `VncPanel` tab based on noVNC, bridged via `VncService` - **Directory sync (DirSync)**: remote ⇄ local bidirectional directory sync; difference preview (only-remote / only-local / newer-remote / newer-local / same); three-color execution results (success / failure / skipped) - **SFTP packed download**: multi-select remote files / directories, packed into a local archive with one click - **Remote file editor**: read and write remote text files directly via `sftp.readFile / sftp.writeFile`, eliminating the download-then-upload step - **Master Password Lock**: full `lock.*` IPC; master password + auto-lock timeout + max failed attempts + temporary lockout (lockedUntil) + lock overlay - **Port forwarding completion**: `forward.create / stop / delete / list`; `ForwardInfo` reports the actual listening port (actualPort), running status, errors; supports `autoStart` - **SSH Agent authentication**: new authentication channel using keys loaded in the system SSH Agent - **WOL wake-on-LAN**: `wol.send` sends a magic packet to the configured MAC address - **Protocol matrix expansion**: RDP, VNC, WSL, Local Shell (`local`) officially available; serial service (`SerialService`) and IPC framework ready - **New services**: `RdpService`, `VncService`, `WolService`, `SerialService`, `LocalShellService`, `DirSyncService` - **New IPC channels**: `wol.*`, `lock.*`, `forward.*`, `serial.list`, `commandHistory.*`, `sftp.syncPreview`, `sftp.syncApply`, `sftp.packDownload`, `sftp.readFile`, `sftp.writeFile` - **New renderer components**: `RdpPanel`, `VncPanel`, `DirSyncDialog`, `RemoteFileEditor` - **Telnet service enhancement**: `TelnetService` refactor - **Session repository & connection manager extensions**: tags, notes, and serial / RDP / VNC extension field persistence - **Internationalization**: ~90 new Chinese/English entries (directory sync, packed download, RDP/VNC config, jump host, authentication methods, security lock, etc.) **🐛 Fixes & Improvements** - SessionDialog refactor: new v3 fields (jump host, startup command, cursor style, line height, tags, notes, serial, RDP/VNC/WSL config) fully integrated - SftpPanel refactor: directory sync entry, packed download entry, remote file editor entry - ConnectionManagementView, MainContent view routing extensions (connections / terminal / sftp / rdp / vnc / monitor / commands / settings / keys) - TerminalTabs adds remote desktop tab (rdp / vnc) support - Monitor collection adds `uptime` and `systemInfo` (hostname / os / kernel / arch / cpuModel) caching #### v1.0.3 (2026-08-15) > Connection management view and new-connection dialog refactor **✨ New Features** - **Connection management view**: new `connections` view as the app default home; selecting a session shows a connection property card (host / port / username / auth / key / tags) and quick command chips - **Search & filtering**: search by connection name, host, or tag; "All / Not connected" status filters - **Connection toolbar**: open terminal / disconnect / edit / delete one-click actions - **New/edit connection dialog refactor** (new-connection-v3 design): - "Test Connection" button to verify reachability and authentication before saving - "Duplicate Connection" feature - Connection tags (tags) and session notes (note) - Jump Host configuration; an SSH tunnel is established through the jump host - Startup commands executed after connect (startupCommand, one per line) - Terminal cursor style (block / bar / underline) and line height settings - Serial config fields (serialPort / baudRate, planned) - New `local` protocol type (Local Shell) **🐛 Fixes & Improvements** - Sidebar and icon bar layout refactor with a new "Connection Management" entry - Default active view changed to `connections` - 80+ new Chinese/English i18n entries #### v1.0.0 (2026-08) > First complete release **✨ New Features** - **Connection management**: SSH / SFTP / Telnet sessions, password / private key authentication, advanced configuration such as proxy, Keep-Alive, timeouts - **Session groups**: multi-level groups, favorites, search, drag-sorting, move group - **Multi-tab terminal**: duplicate / rename / tab color / close current / others / to the right / all, independent connection per tab - **Connection details**: single-click to view details, double-click to open a standalone terminal - **System monitoring**: status bar CPU / memory / system info, red alerts above 90%, monitoring charts panel - **SFTP file management**: upload / download, resumable transfers, pause / resume, persistent transfer queue, record cleanup, one-click open local folder, collapsible panels - **Command manager**: group management, built-in common command templates, double-click to execute - **Key management**: SSH private key management (masked in the UI), host key verification - **Settings center**: launch at startup, auto-connect last session, window close behavior, language switching, appearance, terminal, network, shortcuts, logs, about - **Connection history**: records and quick reconnect - **Config import / export**: sensitive data encrypted - **System tray**: minimize to tray, single instance, audit logs **🔒 Security Enhancements** - SQLCipher 4 full-database encryption (master key managed by Windows DPAPI) - AES-256-GCM secondary encryption for sensitive fields such as passwords / private keys - Plaintext databases automatically migrated to encrypted databases at startup (backup, rollback, cleanup protection) **🐛 Fixes & Improvements** - Fixed multi-tab content syncing and closing one tab closing all tabs; tabs are now mutually independent - Fixed group favorite display, overly wide group indentation, multi-level group movement, drag-sorting, and other interaction issues - Fixed transfer records lost after view switches and transfers continuing after pause - Improved settings effectiveness logic and UI layout > Future release notes will be continuously added here. --- ## Future Plans > The following are planned directions; the final release prevails. | Direction | Description | Status | |------|------|------| | i18n validator dictionary key checking | Static t() call keys must exist in zhMessages | ✅ Implemented in v1.0.12 | | Translatable shortcut messages | Validation errors changed to English source keys + dictionary translation | ✅ Implemented in v1.0.12 | | AI Agent narrow-pane adaptive layout | Inspector narrow-pane control rows single-column full width | ✅ Implemented in v1.0.12 | | English documentation | README_EN.md consistent with the Chinese version + language switcher | ✅ Implemented in v1.0.12 | | Application theme expansion | dark/light/system + ocean/graphite/sand, data-driven | ✅ Implemented in v1.0.11 | | Terminal theme system | 11 TerminalThemeType values, default follows the app theme | ✅ Implemented in v1.0.11 | | macOS packaging | package:mac + dmg/zip + icon.icns | ✅ Implemented in v1.0.11 | | Full i18n coverage | +528 lines, nearly all components + check:i18n script | ✅ Implemented in v1.0.11 | | TerserPlugin minification | webpack production build parallel:4 minification | ✅ Implemented in v1.0.11 | | Audit log viewer | query/sort/pagination + CSV export (formula injection protection) | ✅ Implemented in v1.0.10 | | Diagnostic log switch | SecureLogger can disable diagnostic logs without affecting security events | ✅ Implemented in v1.0.10 | | RDP orphan profile cleanup | cleans up 24h+ finalzero-rdp-*.rdp temp files at startup | ✅ Implemented in v1.0.10 | | Settings deep-link navigation | request/consumeSettingsCategory jumps to a specific subpage | ✅ Implemented in v1.0.10 | | Container management (Docker) | containers/images/networks/Compose/Swarm, local + remote SSH tunnel transports, preflight + approval | ✅ Implemented in v1.0.9 | | AI multimodal attachments | image + text attachments, TTL auto-release, multimodal provider | ✅ Implemented in v1.0.9 | | Host key confirmation coordinator | ssh2 hostVerifier bridging the confirmation dialog + known-hosts repository | ✅ Implemented in v1.0.9 | | Recursive split layout | RecursiveSplitLayout visualizing the recursive split tree | ✅ Implemented in v1.0.9 | | Centralized IPC channel declarations | ipcChannels whitelist + contract tests guarding consistency | ✅ Implemented in v1.0.9 | | Remote file editor safe write | SHA-256 version fingerprint + conflict detection + recovery copy | ✅ Implemented in v1.0.8 | | Terminal split tree refactor | recursive split tree, up to 12 panes, stable ids | ✅ Implemented in v1.0.8 | | Inspector panel lazy loading | React.lazy chunk splitting, reducing the initial bundle | ✅ Implemented in v1.0.8 | | Webpack chunk splitting | contenthash chunkFilename + clean | ✅ Implemented in v1.0.8 | | WorkspaceShell workspace shell | removed the top panel, business pages get full vertical space | ✅ Implemented in v1.0.7 | | Resumable home | single-column task entries, degrades back to the connections page after restart | ✅ Implemented in v1.0.7 | | Unified Inspector panel | reuses command/AI/remote file/monitor, dock/overlay/sheet | ✅ Implemented in v1.0.7 | | Adaptive sidebar | auto/dock/overlay, narrow-screen scrim + Escape + persistence | ✅ Implemented in v1.0.7 | | Electron native module toolchain | `.nvmrc` + run-jest-electron + verify:native + postinstall | ✅ Implemented in v1.0.7 | | AI multi-model selection | Ask / Agent switching between enabled models, `isDefault` resolves the default | ✅ Implemented in v1.0.6 | | AI streaming response + reasoning separation | `content` / `reasoning` split, `reasoningContent` stored separately | ✅ Implemented in v1.0.6 | | AI Markdown rendering | `react-markdown` + `remark-gfm`, code block copy | ✅ Implemented in v1.0.6 | | AI thinking panel | collapsed display of reasoning and Agent thought chains | ✅ Implemented in v1.0.6 | | Terminal context injection | active terminal output as AI context, sanitized by the main process | ✅ Implemented in v1.0.6 | | Cloud sync category selection | 10 data domains independently selectable, auditLogs off by default | ✅ Implemented in v1.0.6 | | SQL log redaction | credential-related SQL auto `[REDACTED]` | ✅ Implemented in v1.0.6 | | AI assistant (Ask / Agent) | natural language command generation + ReAct autonomous execution + approval flow | ✅ Implemented in v1.0.5 | | Cloud Sync | WebDAV / S3 encrypted config sync + conflict resolution | ✅ Implemented in v1.0.5 | | Terminal line number / timestamp gutter | independent left column, synchronized scrolling | ✅ Implemented in v1.0.5 | | Terminal keyword highlighting | xterm Decoration built-in rule set | ✅ Implemented in v1.0.5 | | Terminal action links | IPv4 / host:port / archive name auto-links | ✅ Implemented in v1.0.5 | | RDP remote desktop | `mstsc.exe` standalone window, domain / screen mode / NLA support | ✅ Implemented in v1.0.4 | | VNC remote desktop | noVNC rendering + `VncService` bridging | ✅ Implemented in v1.0.4 | | Directory sync (DirSync) | remote ⇄ local bidirectional sync, difference preview + apply | ✅ Implemented in v1.0.4 | | Master Password Lock | master password + auto-lock + failed-attempt lockout + lock overlay | ✅ Implemented in v1.0.4 | | Port forwarding management | `forward.*` IPC, ForwardInfo, autoStart | ✅ Implemented in v1.0.4 | | SFTP packed download / remote file editor | remote multi-select packing, direct text file read/write | ✅ Implemented in v1.0.4 | | SSH Agent auth / WOL wake-on-LAN | Agent channel + `wol.send` magic packet | ✅ Implemented in v1.0.4 | | Command history / shortcut config | session-isolated history + ShortcutMap | ✅ Implemented in v1.0.4 | | Terminal split UI | 1×1 / 1×2 / 2×1 / 2×2 split selector | ✅ Implemented in v1.0.2 | | Serial connections | `SerialService` + `serial.list` + full serial parameter form | ✅ Implemented in v1.0.6 | | Session templates & batch deployment | template-based creation, batch command execution / broadcast | ✅ Implemented in v1.0.6 | | Auto-update | in-app update check and silent download | 🔜 Planned | | Cross-platform support | Linux / macOS platform adaptation | 🔜 Planned | | Plugin architecture | third-party extension support | 🔜 Planned | --- ## Tech Stack | Category | Technology | Version | |------|------|------| | Desktop framework | Electron | 28 | | Frontend framework | React | 18 | | Programming language | TypeScript | 5 | | UI component library | Ant Design | 5 | | Terminal component | xterm.js | 5 | | Network protocols | ssh2, ssh2-sftp-client, telnet-stream | - | | Data storage | better-sqlite3-multiple-ciphers (SQLCipher 4) | 9.4.5 | | Charting library | ECharts | 5 | | Security | Windows DPAPI (safeStorage), AES-256-GCM | - | | Build tools | Webpack, electron-builder (NSIS) | - | | Test framework | Jest | 29 | --- ## Directory Structure ```text FinalZero/ ├── src/ │ ├── main/ # Electron main process │ │ ├── database/ # Database connection, repositories, SQLCipher encrypted migration │ │ │ ├── Database.ts │ │ │ ├── DbEncryption.ts │ │ │ ├── SessionRepository.ts │ │ │ ├── GroupRepository.ts │ │ │ ├── HistoryRepository.ts │ │ │ ├── SshKeyRepository.ts │ │ │ ├── HostKeyRepository.ts │ │ │ ├── CommandRepository.ts │ │ │ ├── SftpTransferRepository.ts │ │ │ └── AuditLogRepository.ts │ │ ├── ipc/ # IPC handlers │ │ │ ├── IpcRegistrar.ts │ │ │ ├── SessionHandlers.ts │ │ │ ├── SshHandlers.ts │ │ │ ├── SftpHandlers.ts │ │ │ ├── MonitorHandlers.ts │ │ │ ├── KeyHandlers.ts │ │ │ ├── DataHandlers.ts │ │ │ ├── LocalFileHandlers.ts │ │ │ └── SystemHandlers.ts │ │ ├── security/ # Keychain, encryption/decryption, secure logging │ │ │ ├── SecurityManager.ts │ │ │ ├── CryptoManager.ts │ │ │ ├── DataCipher.ts │ │ │ ├── KeychainManager.ts │ │ │ ├── HostKeyManager.ts │ │ │ ├── InputValidator.ts │ │ │ └── SecureLogger.ts │ │ └── services/ # SSH / SFTP / Telnet / monitoring services │ │ ├── ConnectionManager.ts │ │ ├── SshService.ts │ │ ├── SftpService.ts │ │ ├── TelnetService.ts │ │ ├── MonitorService.ts │ │ └── PortForwardService.ts │ ├── preload/ # Preload script (contextBridge) │ ├── renderer/ # React renderer process │ │ ├── components/ # UI components │ │ │ ├── commands/ # Command manager │ │ │ ├── dialogs/ # Dialogs │ │ │ ├── layout/ # Layout components │ │ │ ├── monitor/ # Monitor panel │ │ │ ├── session/ # Session management │ │ │ ├── settings/ # Settings pages │ │ │ ├── sftp/ # SFTP file management │ │ │ └── terminal/ # Terminal components │ │ ├── hooks/ # Custom React hooks │ │ ├── i18n/ # Internationalization (Chinese / English) │ │ ├── store/ # State management │ │ ├── styles/ # Design system and global styles │ │ └── types/ # Renderer type definitions │ └── shared/ # Shared types and constants ├── scripts/ # Development and database encryption verification scripts ├── build/ # App icon and other packaging resources ├── docs/ # Project documentation ├── package.json └── README.md ``` --- ## FAQ
After encryption, are my previous connections and commands still there? Yes. Plaintext databases are automatically migrated to encrypted databases at startup, with data preserved as-is; the migration process has backup and rollback protection.
Why can't the database file be opened after being copied to another computer? This is the expected behavior of encryption. The master key is stored via Windows DPAPI under the current account and cannot be decrypted across machines / accounts. Please use the in-app import / export feature to migrate data.
Native modules report a NODE_MODULE_VERSION error after installing dependencies? Run `npm run rebuild`, or re-run `npm install` to restore the prebuilt binaries matching Electron.
Startup shows "database encryption migration failed / file in use"? Please first close any program currently holding the database open (e.g., Navicat, DB Browser for SQLite), then restart the app.
How do I report issues or suggest new features? You are welcome to give feedback in the project's Issue / discussion area. New features will be continuously scheduled and iterated; updates will be synced to the "Changelog" section of this document.
--- ## Contributing Welcome to contribute to FinalZero! Whether reporting issues, suggesting features, fixing bugs, or improving documentation, every contribution supports the project. ### How to Contribute | Contribution | Description | |----------|------| | 🐛 Report issues | Describe reproduction steps and environment info in an Issue | | 💡 Suggest features | Describe your use case and expectations in the discussion area or an Issue | | 🔧 Submit code | Fix bugs or implement new features, submit a Pull Request | | 📝 Improve docs | Improve the README, code comments, or usage guides | | 🌍 Translation | Help improve multi-language support | ### Commit Message Convention Commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) spec: ```text ():