Commit Graph
1124 Commits
Author SHA1 Message Date
Kang 64d53a8076 style(saved-connections): implement expandable search functionality with keyboard navigation (#548)
- Added a new state for managing search expansion and a ref for the search input.
- Implemented focus and selection behavior for the search input when expanded.
- Enhanced keyboard navigation to handle Escape key for collapsing the search.
- Updated the search input to be read-only until focused, allowing for a cleaner UI.
- Introduced a clear search button that resets the filter text and collapses the search when clicked.
2026-09-05 01:44:52 +08:00
Kang 92f9af4677 feat(header): add preventWindowControlMouseFocus function and integrate it into window control buttons (#551)
- Introduced preventWindowControlMouseFocus to prevent focus shift on mouse down for window control buttons.
- Updated Header component to use this function on minimize, maximize, and close button mouse down events.
- Added tests for window control focus behavior to ensure expected functionality.
2026-09-04 23:03:42 +08:00
Kang 337e9d5194 style(tabbar): adjust color-mix percentages for active and inactive tab backgrounds (#576) 2026-09-04 17:10:09 +08:00
victorwon2001 1af67dacef fix: 修复 Windows 本地终端路径同步 2026-09-04 12:53:37 +09:00
victorwon2001 74b13dbf86 fix(zmodem): 改用非阻塞文件选择器 2026-09-04 09:45:10 +09:00
Kang 5f479c871a Merge pull request #571 from LunaSpica/fix/settings-language-cancel
fix(settings): 设置窗口切换语言后取消无法恢复原语言
2026-09-04 01:16:57 +08:00
Kang dec04a81c8 fix(settings): preserve cancel close behavior 2026-09-04 00:54:53 +08:00
Yue-Sui 4ef2b985d5 fix(settings): 弹窗放弃更改时完成关闭流程 2026-09-04 00:40:02 +08:00
Yue-Sui 807f0af544 fix(settings): language preview respects cancel/draft flow 2026-09-03 23:28:00 +08:00
victorwon2001 6d01a494f1 fix: 修复 Windows 中键粘贴触发 Vim 鼠标输入 2026-09-04 00:19:57 +09:00
Kang b85d4c2c84 Merge pull request #566 from victorwon2001/fix/issue-557
fix(notes): 修复右键重命名焦点丢失
2026-09-03 20:34:07 +08:00
victorwon2001 99540c6abe fix(notes): 修复右键重命名焦点丢失 2026-09-03 21:30:51 +09:00
Kang f9e52a3e54 chore(i18n): update descriptions for reconnecting to last working directory
- Revised the English, Korean, Simplified Chinese, and Traditional Chinese translations for the reconnectRestoreCwdDesc key to clarify the behavior of reconnecting to the last known working directory in SSH sessions.
2026-09-03 20:01:24 +08:00
Kang b148948623 refactor(terminal): change default behavior for reconnecting to previous working directory
- 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.
2026-09-03 20:01:03 +08:00
llyVictory 4a63b90e28 Merge branch 'nyakang:main' into feat/ssh-session-reconnect 2026-09-03 17:06:45 +08:00
lly 93fa27b54a merge: update SSH reconnect branch with upstream main 2026-09-03 17:02:47 +08:00
Kang e1d587f641 refactor(LocalTerminal, SshForm): reorganize dynamic tab title components
- Moved dynamic tab title components within LocalTerminal and SshForm for improved structure and consistency.
- Updated the layout to ensure proper alignment and spacing for better user experience.
- Retained functionality of dynamic tab title switches in both components.
2026-09-03 16:55:25 +08:00
lly 0faa75dc0f fix(terminal): harden SSH reconnect cwd restoration 2026-09-03 16:36:44 +08:00
Kang 2c77b77e90 style(codeMirror): update search panel styling to use theme colors (#558)
- Enhanced the styling of the CodeMirror search panel by removing the light button gradient and implementing theme colors for buttons and inputs.
- Added focus ring and checkbox accent styles to improve accessibility and visual consistency.
- Updated tests to verify the new styling rules for the search panel.
2026-09-03 10:29:20 +08:00
lly b97f759f25 fix(terminal): harden reconnect cwd restore per review 2026-09-03 09:49:31 +08:00
Kang 7c8f9cf424 fix(file-drop): replace isDropPositionInsideElement with isDropPositionTopmostWithinElement for improved drop target detection
- Updated the file drop logic in both useExternalFileDrop and useTerminalFileDrop hooks to utilize isDropPositionTopmostWithinElement, enhancing accuracy in determining if a drop event occurs over the intended target.
- Added unit tests for the new isDropPositionTopmostWithinElement function to ensure correct behavior in various scenarios, including covered elements and position validation.
2026-09-02 19:31:00 +08:00
lly 8878f0a71e feat(terminal): restore last working directory on SSH reconnect 2026-09-02 16:33:58 +08:00
Kang 93760ee740 chore(i18n): add localization for MCP error messages in multiple languages
- Added new localized strings for MCP unavailability errors in English, Korean, Simplified Chinese, and Traditional Chinese.
- Enhanced user experience by providing clear error messages related to Claude Code and Codex fallback scenarios.
2026-09-02 16:22:32 +08:00
Kang 3685459dd1 feat(ai): enhance AI stream control event handling and add localization for MCP errors
- 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.
2026-09-02 16:22:23 +08:00
Kang 688bbfd615 Merge upstream main into PR #521 2026-09-02 00:49:05 +08:00
Kang 468c1d4902 Merge pull request #537 from agogo233/feat/context-menu-quick-command
feat: add context menu action to save terminal selection as quick com…右键菜单支持将终端选中内容保存为快捷命令
2026-09-02 00:10:53 +08:00
Kang 40d306eaad fix: preserve terminal selection when saving quick command 2026-09-02 00:09:05 +08:00
Kang 4d81f4f377 Merge pull request #549 from llyVictory/feat/editor-ctrl-wheel-zoom
feat(editor): 内置编辑器支持 Ctrl+滚轮缩放字体
2026-09-01 23:47:11 +08:00
王浩生 718db66b13 fix: scroll terminal to cursor when typing with a selection
When the terminal viewport is scrolled up and the user has a selection
over scrollback output, key presses were sent via terminal.input(data,
false) to preserve the selection (by design, it is only cleared on mouse
click). However, xterm.js gates both selection clearing and
scrollOnUserInput behind the same wasUserInput flag, so the viewport
never scrolled back to the cursor and the user could not see what they
typed.

Keep the selection-preservation behavior but explicitly scroll to the
bottom when the viewport is not at the cursor, replicating xterm's
scrollOnUserInput for every key path in the selection branch
(printable input, backspace/delete, enter, arrows, ctrl/alt combos).

Fixes #518
2026-09-01 20:41:26 +08:00
lly 5c379d61b8 feat(editor): support Ctrl+wheel font zoom in builtin file editor 2026-09-01 19:10:32 +08:00
Kang 7d1d4073e7 fix(terminal): focus on open tab terminal after tab change (#547)
- Added a call to `focusOpenTabTerminal(tab)` in the `onTabChange` handler to ensure the terminal focuses on the active tab when changed, enhancing user experience.
2026-09-01 16:49:11 +08:00
victorwon2001 5da78e483f fix: restore RDP jump host on edit 2026-09-01 06:08:45 +09:00
Kang 2c74efb7e3 perf(terminal): implement snapshot restore functionality and enhance terminal refresh behavior
- Added support for snapshot restoration in the terminal, allowing for smoother recovery of terminal state during hibernation and reconnection.
- Updated the `useTerminalRefreshEffects` hook to suppress refreshes while a snapshot is being restored, improving performance and user experience.
- Introduced a new `createXTerminalSnapshotRestoreController` to manage the snapshot restoration process, including phases for replaying and finalizing the restoration.
- Enhanced tests for terminal refresh effects and added new tests for snapshot restoration to ensure correct behavior during terminal state transitions.
2026-08-31 22:35:09 +08:00
Kang 39a2576d15 chore(i18n): update translations for new permission modes and full access features
- Added new translation keys for enabling full access and updated descriptions for permission modes in English, Korean, Simplified Chinese, and Traditional Chinese locale files.
- Enhanced existing translations for external MCP descriptions and permission confirmations to improve clarity and user understanding.
2026-08-31 21:12:42 +08:00
Kang 576d1899d5 feat(mcp): implement MCP session open request handling and permission modes
- 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.
2026-08-31 21:12:30 +08:00
agogo233 1c115b2463 feat: add context menu action to save terminal selection as quick command 2026-08-31 09:01:16 +00:00
Kang aa695182a2 Merge pull request #533 from llyVictory/fix/editor-selection-terminal-color
fix(editor): 内置文件编辑器选区复用终端选区颜色
2026-08-31 14:43:05 +08:00
Kang 93c5aeaa3e perf(terminal): add tests and enhancements for terminal refresh effects and keyword highlighting
- Introduced unit tests for the `useTerminalRefreshEffects` hook to validate terminal repainting behavior and texture invalidation on DPI scale changes.
- Updated the `useTerminalRefreshEffects` hook to prevent unnecessary texture atlas clearing during active terminal refreshes.
- Added a new `shouldSuspendKeywordHighlighter` function to manage keyword highlighting based on terminal visibility and performance mode, with corresponding tests to ensure correct behavior.
- Enhanced the `useKeywordHighlighter` hook to support session-specific keyword highlighting and cache management.
- Refactored performance configurations for keyword highlighting to optimize refresh rates and decoration limits.
2026-08-31 11:49:06 +08:00
lly 5f5a456284 fix(editor): reuse terminal selection color in builtin file editor
The builtin file editor rendered selections in a pale white that
obscured file content, unlike the terminal.

- Publish the terminal theme's selectionBackground as the
  --df-terminal-selection CSS variable and use it (with !important)
  for .cm-selectionBackground, so the editor selection matches the
  terminal selection color instead of CodeMirror's #d7d4f0 default.
- Move the .cm-activeLine highlight onto a ::before pseudo-element
  with z-index -3 (below the selection layer at -2) and clear the
  element background, so the active line highlight no longer washes
  out the selection on the cursor line (visible when selecting
  upwards, where the top line holds the cursor).

Add regression tests for the published CSS variable and the compiled
selection/active-line rules.
2026-08-31 11:15:32 +08:00
Kang 011297daf3 style(NetworkPanel): enhance layout and styling for TunnelRow and TunnelRuntimeBadge components (#532)
- Updated the TunnelRow component to improve the layout by ensuring the name display is properly truncated and responsive.
- Modified the TunnelRuntimeBadge component to include additional styling for better visual consistency and to prevent text overflow.
2026-08-31 10:01:43 +08:00
Kang 1c94d84bb9 chore(i18n): update terminal right-click action translations
- Removed outdated right-click paste translations and added new keys for terminal right-click action settings in English, Korean, Simplified Chinese, and Traditional Chinese locale files.
- Updated descriptions to reflect the new options for right-click behavior in the terminal.
2026-08-30 21:44:10 +08:00
Kang 877a970e03 feat(interaction): implement terminal right-click action settings (#530)
- 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.
2026-08-30 21:44:01 +08:00
Kang 464eddeaa9 chore(i18n): update translations for external MCP session permissions
- Modified the translation for "Allow for this MCP session" to "Allow for this connection" in English, Korean, Simplified Chinese, and Traditional Chinese locale files to enhance clarity and consistency in user messaging.
2026-08-30 15:14:24 +08:00
Kang 078e8be4f4 feat(mcp): implement active session reporting and associated hooks
- 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.
2026-08-30 15:14:16 +08:00
Kang 61677c2e71 chore(i18n): add SFTP pipeline depth translations for multiple locales
- Added new translation keys for SFTP pipeline depth configuration in English, Korean, Simplified Chinese, and Traditional Chinese locale files.
- Included descriptions to enhance user understanding of the pipeline depth setting and its impact on SFTP performance.
2026-08-30 01:21:35 +08:00
Kang 4972d80795 feat: add SFTP pipeline depth configuration (#429)
- 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.
2026-08-30 01:21:24 +08:00
Kang 0cbcd0e202 chore(i18n): restore 'sshConfigSource' translation in multiple locales
- Reintroduced the 'sshConfigSource' translation key in English, Korean, Simplified Chinese, and Traditional Chinese locale files to ensure consistent localization for SSH configuration imports.
2026-08-29 12:39:08 +08:00
mengshouer 4e5804141a fix(tabs): restore titles after hibernation wake failures 2026-08-29 12:12:11 +08:00
Joel Claw 216df04ace fix: address Codex review feedback on PR #504
- 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
2026-08-29 11:15:25 +08:00
Joel Claw ece922baa3 feat: SSH config import with ProxyJump support
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.
2026-08-29 11:15:25 +08:00