- Reduced the injection timeout from 30 seconds to 8 seconds for improved responsiveness.
- Introduced a new `SuppressionDiagnostics` struct to track and log suppression metrics.
- Updated the injection handling logic to incorporate the new diagnostics and timeout mechanisms.
- Refactored related functions for clarity and maintainability.
- Updated the default setting for reconnecting to the previous working directory from true to false across various components and settings.
- Adjusted related tests to reflect the new default behavior.
- Introduced a mechanism to prune bash history entries within a defined range, enhancing the management of command history.
- Added a new constant for maximum history entries and updated the injection script to utilize this feature.
- Improved the script's logic to ensure proper handling of history entries, including marking the beginning and end of relevant history sections.
- Reformatted the injection script in `osc.rs` to enhance clarity and maintainability.
- Consolidated multiple lines into a single compound entry while ensuring compliance with remote PTY input limits.
- Updated function comments for better understanding of the script's purpose and functionality.
- Introduced `classifyAIStreamControlEvent` to categorize AI stream events as "warning", "done", or "error", improving event management.
- Updated `AIAssistantPanel` to handle new event types, displaying appropriate warnings and error messages based on the event kind.
- Added localization for external agent MCP fallback and startup errors in multiple languages.
- Created tests for the new event classification logic and ensured proper handling of localized error messages.
- Added `list_dir_command` and `stat_command` functions to streamline the creation of shell commands for listing directories and retrieving file statistics with numeric owner and group information.
- Updated `stat_remote_properties` and `list_dir` methods to utilize the new command functions, improving code readability and maintainability.
- Enhanced unit tests to validate the new command functions and ensure correct parsing of directory entries.
- Added support for handling MCP session open requests, including the ability to respond to session creation with success or error messages.
- Introduced new permission modes for AI interactions, including "full_access", and updated the permission handling logic to accommodate these changes.
- Refactored the AiPermissionSelect component to manage permission modes more effectively and added corresponding tests to ensure functionality.
- Updated translations for new permission modes and improved the UI to reflect changes in session handling.
- Included additional Windows features "Win32_Security" and "Win32_Security_Authorization" in the Cargo.toml file to enhance security capabilities for the application.
- Moved Windows ACL logic from `discovery.rs` to a new `windows_acl.rs` module for better organization and maintainability.
- Implemented `set_current_user_only` function to apply current user-only ACLs for files and directories.
- Added unit tests to ensure that the discovery process preserves private ACLs and cleans up temporary files correctly.
- Updated `mod.rs` to include the new `windows_acl` module conditionally for Windows builds.
- Updated Tauri packages in package.json and pnpm-lock.yaml to their latest versions:
- @tauri-apps/api to ^2.11.1
- @tauri-apps/plugin-dialog to ^2.7.2
- @tauri-apps/plugin-opener to ^2.5.4
- @tauri-apps/cli to ^2.11.4
- Updated several Rust dependencies in Cargo.lock, including aes (0.9.3), aes-gcm (0.11.1), and others to improve security and performance.
- Introduced a new setting for terminal right-click actions, allowing users to choose between "none", "menu", and "paste" options.
- Updated the InteractionTab component to include a tabbed interface for selecting the right-click action.
- Refactored the TerminalContextMenu to handle the new right-click action logic, ensuring appropriate behavior based on user selection.
- Added tests for the terminal right-click action functionality to validate expected behaviors and interactions.
- Migrated legacy right-click paste settings to the new terminal right-click action configuration.
- Added `useMcpActiveSession` hook to manage and report the active MCP session ID.
- Integrated the hook into the main `App` component to ensure active session updates.
- Created tests for the `useMcpActiveSession` hook to validate session reporting behavior.
- Introduced `report_mcp_active_session` command in the Tauri backend to handle session updates from the frontend.
- Updated MCP tool definitions to include new capabilities and ensure proper session management.
- Introduced a new setting for SFTP pipeline depth in the SshForm component, allowing users to specify the depth for single-file SFTP requests.
- Updated SftpSettings interface and backend to support the new pipeline depth option, including validation for minimum and maximum values.
- Enhanced the SFTP backend to utilize the pipeline depth setting during file transfers, improving performance and control over SFTP operations.
- Added tests to ensure correct handling of pipeline depth configurations and their effects on transfer behavior.
- Improved handling of ProxyJump specifications to correctly link multi-hop connections.
- Updated tests to validate the behavior of direct and routed jumps, ensuring existing aliases do not block multi-hop imports.
- Refactored `jump_import_node` to manage route-specific semantics and maintain clarity in naming conventions for imported connections.
- Updated `list_ssh_config_hosts` to return entries directly.
- Enhanced `load_from` method to retain global options and handle ProxyJump specifications more robustly.
- Refactored `to_entries` method to return an `AppResult` for better error handling.
- Introduced `ParseState` struct to manage parsing state and improve clarity in the parsing logic.
- Adjusted parsing functions to align with OpenSSH behavior for relative includes and global options.
- Parse user@host:port in ProxyJump specs (P2)
- Deduplicate concrete aliases in list_hosts (P2)
- Retain global options declared before first Host block (P2)
- Fix resolve_first_match_wins test expectation (P1)
- Wire full ProxyJump chain in import (all hops, not just first) (P1)
- ProxyJump user@host:port specs parsed for jump host matching (P2)
- Localization already done (sshConfigSource in all 4 locales)
- Cargo.lock already has whoami entry
- P1: Add whoami 1.5.2 to Cargo.lock (was missing, breaks --locked builds)
- P1: Fix auth mode from invalid 'publicKey' to valid 'agent' for imported
connections with IdentityFile (key files need manual registration in
nyaterm's key store; identity path noted in description)
- P1: Wire ProxyJump relationships during import - jump hosts imported
first, their IDs linked via ConnectionNetwork.proxy_jump_id on targets
- P1: Localize SSH Config source label in all 4 locale files
(en, zh-CN, zh-TW, ko) per AGENTS.md L115-L119
- P2: Fix relative Include resolution - base_dir now derived from
config_path.parent() (~/.ssh/) instead of config_path itself
- Remove unused ConnectionNetwork import
- Add newline at EOF in cmd/ssh_config.rs
- Add test for relative include base_dir derivation
Add ability to import sessions from ~/.ssh/config into nyaterm.
Backend (Rust):
- New core/ssh_config module: parses OpenSSH config with Host patterns
(wildcards, negation), HostName, Port, User, IdentityFile, ProxyJump
(single and multi-hop chains), HostKeyAlias, and Include directives
(recursive with cycle detection and glob support)
- First-match-wins option resolution matching OpenSSH semantics
- New cmd/ssh_config module with 4 Tauri commands: list_ssh_config_hosts,
get_ssh_config, resolve_ssh_host, import_ssh_config_hosts
- Import skips duplicates by name, creates SavedConnection entries
with proper ConnectionType::Ssh config
- 5 unit tests covering glob matching, negation, proxy jump chains,
first-match-wins, and wildcard filtering
Frontend (React/TypeScript):
- New 'SSH Config' source in ImportDialog (no file picker needed,
reads ~/.ssh/config directly)
- New types: SshConfigEntry, SshConfigHop in global.d.ts
- Import flow: click SSH Config in import dialog, all concrete hosts
are imported as saved connections, duplicates skipped
Example ~/.ssh/config:
Host bastion
HostName bastion.example.com
User jumpuser
Host internal-db
HostName 10.0.0.42
User admin
ProxyJump bastion
IdentityFile ~/.ssh/db_key
Host deep-server
HostName 192.168.5.100
User root
ProxyJump bastion,internal-gateway
Wildcard patterns (web-*) are excluded. Only concrete host aliases
are imported. No real server data transmitted, reads local file only.
- Enhanced the PropertiesDialog component to support editing symlink targets for remote files.
- Introduced a new state for symlink targets and updated the UI to include an input field for this attribute.
- Implemented validation to ensure symlink targets are provided when editing symlink properties.
- Updated the backend to handle symlink target updates, including new commands for remote symlink management.
- Adjusted file properties handling to include symlink target information in both local and remote contexts.
- Modified the build command to include a new script for building the MCP sidecar.
- Introduced a new script `build-mcp-sidecar.mjs` to handle the compilation of the MCP sidecar using Cargo.
- Updated the `sync-version.mjs` script to synchronize versioning for the MCP sidecar package.
- Adjusted the Tauri configuration to ensure the MCP sidecar is built before development starts.
- Added the McpApprovalHost component to handle external MCP approval requests, enhancing user interaction with external tools.
- Updated the App component to include the McpApprovalHost, ensuring it is rendered within the application layout.
- Introduced external MCP settings in the AiTab component, allowing users to configure MCP options such as enabling/disabling and permission modes.
- Implemented state management for MCP runtime status and client configurations, improving the overall functionality and user experience.
- Added default settings for external MCP in the AI settings module, ensuring a consistent initial configuration.
- Introduced the OutputAckCoordinator class to handle acknowledgment of output bytes in terminal sessions, allowing for better management of session state and error handling.
- Added comprehensive unit tests to validate the functionality of the OutputAckCoordinator, including scenarios for ACK handling, failure requeuing, and backoff strategies.
- Updated XTerminal and xterminalOutputController to integrate the new OutputAckCoordinator, enhancing output management capabilities.
- Refactored session command handling to utilize session_command_channel for improved command processing.
- Updated security settings to introduce distinct options for enabling startup and idle locks, replacing the previous combined screen lock setting.
- Modified relevant components and contexts to accommodate the new settings structure.
- Implemented migration logic to transition from the legacy screen lock to the new settings, ensuring backward compatibility.
- Enhanced user interface to reflect the changes in security options.
- Replaced the previous unlistener array with an `asyncUnlistenBag` for better management of event listeners in the XTerminal component.
- Updated the setup of wake listeners to utilize the new unlisten bag, improving code clarity and efficiency.
- Added a new utility for handling asynchronous unlisten operations, ensuring proper cleanup of listeners.
- Introduced tests for the async unlisten bag to validate its functionality and reliability.
- Added `createExternalLocalSession` function to facilitate the creation of local terminal sessions with specified working directories.
- Introduced `connectExternalLocalSession` in the `App` component to manage external local session connections.
- Enhanced `extract_external_open_urls` to support local session requests with optional working directory arguments.
- Updated `create_local_session` to handle explicit working directory inputs and validate their existence before session creation.
- Added tests for local session handling, including scenarios for missing directories and explicit working directory overrides.
- Improved `LocalSessionConfig` to include a flag for handling missing working directories during session initialization.
- Added new functions `resolveFileEditorOpenTarget` and `resolveInternalEditorDisplay` to determine the appropriate editor mode based on user settings.
- Introduced a test suite for the file editor open mode to validate the new resolution logic.
- Updated the `FileExplorer` component to utilize the new editor resolution functions, enhancing file handling capabilities.
- Modified the `TransferTab` and context providers to include `internal_editor_display` settings, defaulting to "workspace".
- Enhanced type definitions to support the new editor settings and ensure type safety across components.
- Introduced a new `FloatingPanel` component to support left and right floating panels, enhancing the user interface for better panel management.
- Added state management for floating panels in the `App` component, allowing users to open, close, and move panels between sides.
- Implemented logic to handle panel open modes, enabling users to switch between docked and floating modes seamlessly.
- Updated the `ActivityBar` and `AppLayout` components to integrate floating panel features, including context menu options for toggling panel modes.
- Enhanced tests to cover new floating panel functionalities and ensure robust behavior across different scenarios.
- Introduced new components for managing activity bar overlays, including `ActivityBarResetDialog` and `AppOverlayDialogs`.
- Added functionality to hide and show activity bar items, improving user control over the interface.
- Implemented reset layout functionality for the activity bar, allowing users to restore default settings.
- Updated the `ActivityBar` component to support hidden items and context menu interactions for better usability.
- Refactored related hooks and context providers to manage activity bar state effectively.
- Enhanced tests to cover new features and ensure robust functionality.
- Added support for SSH runtime modes ("standard" and "terminal") across various components, including session creation and external connection parsing.
- Updated the `ExternalOpenIntent` and related types to include runtime mode specifications.
- Enhanced the temporary link parsing to handle runtime modes, ensuring proper configuration for SSH connections.
- Implemented tests to validate runtime mode functionality and its integration with existing features.
- Refactored relevant functions to accommodate the new runtime mode logic, improving overall connection management.
- Added functionality to import, delete, and display custom connection icons in the NewSessionPage.
- Introduced a new ConnectionCustomIcon type to manage custom icon data, including ID, name, and data URL.
- Enhanced the backend with commands to handle custom icon operations, including importing and deleting icons.
- Updated the storage layer to support custom icon persistence and retrieval.
- Implemented UI components for selecting and managing custom icons, including import and delete options.
- Added tests to ensure proper functionality of custom icon handling and migration from legacy data URLs.
- Added a new `SessionNetworkSection` component to handle proxy and jump host configurations for RDP, SSH, and VNC session forms.
- Updated `RdpForm`, `SshForm`, and `VncForm` to include the new network section, allowing users to select proxies and jump hosts.
- Enhanced the `NewSessionPage` to support network configurations across different session types.
- Modified related tests to ensure proper functionality of the new network selection features.
- Modified the `Cargo.toml` to adjust the features for the `ironrdp` dependency, removing `rustls` from the default features and adding platform-specific configurations for `native-tls` on Windows.
- Updated the `Cargo.lock` to include `tokio-native-tls` as a dependency for improved TLS support.
- Ensured compatibility with both Windows and non-Windows environments by specifying different features for the `ironrdp` package based on the target platform.
- Added detailed logging for RDP TLS backend selection, improving traceability during connection setup.
- Refactored error classification functions to better categorize TLS and certificate-related errors, enhancing error handling.
- Introduced new utility functions to identify TLS errors and Nyaterm certificate rejections, streamlining error management.
- Added unit tests to validate the behavior of the new error classification logic and ensure robustness in handling various error scenarios.
- Added support for selecting API formats in the AI settings, specifically for OpenAI and compatible providers.
- Implemented a new `supportsApiFormatSelection` function to determine if a provider allows API format selection.
- Updated the `AiProviderCredential` type to include an `api_format` field, defaulting to "chat_completions".
- Enhanced the UI to allow users to select between "chat_completions" and "responses" formats when configuring credentials.
- Updated schema version to 6 to reflect changes in the settings structure.
- Added tests to ensure proper handling of API format defaults and selection logic.
- Moved focusability settings for child windows to the macOS-specific section to ensure proper focus management during window creation.
- Removed redundant focusability settings from the initial window builder configuration, streamlining the code.
- Ensured that the child window remains unfocusable until the ready handshake is complete, preventing focus issues on macOS.
- Changed the default base URL for the Ollama provider from the v1 path to the root URL.
- Added tests to ensure the Ollama provider uses the correct base URL and migrates legacy URLs appropriately.
- Introduced helper functions to manage Ollama provider settings and ensure compatibility with legacy configurations.