mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-15 04:43:36 +00:00
0ff03110c9
* feat: add robust OSC 52 clipboard support for tmux/SSH clipboard sync (#587) Upgrade @xterm/addon-clipboard to v0.2.0 and add a custom RobustClipboardProvider that handles browser Clipboard API focus restrictions by deferring writes until the window regains focus. Uses Electron native clipboard when available for reliable access without browser API limitations. Changes: - Create src/lib/clipboard-provider.ts with write-only provider - Update all terminal components (desktop, mobile, docker console) - Add electronClipboard bridge in Electron preload - Add clipboard permission handler in Electron main process * chore: remove translations * feat: add 5-panel and 6-panel split screen layouts (#584) * Temporary merge for 1.11.1 syncing (#543) * fix: remote translations * feat: support OIDC configuration via environment variables (#531) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: support OIDC configuration via environment variables Add support for configuring OIDC authentication through environment variables, enabling containerized deployments without database access: - OIDC_CLIENT_ID - OIDC_CLIENT_SECRET - OIDC_ISSUER_URL - OIDC_AUTHORIZATION_URL - OIDC_TOKEN_URL - OIDC_USERINFO_URL (optional) - OIDC_IDENTIFIER_PATH (optional, default: "sub") - OIDC_NAME_PATH (optional, default: "name") - OIDC_SCOPES (optional, default: "openid email profile") Environment variables take priority over database configuration. Closes Termix-SSH/Support#16 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: add modern DH group KEX algorithms for better compatibility (#530) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: add modern DH group KEX algorithms for better compatibility Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms which are supported by ssh2 library but were not configured in Termix. These algorithms provide: - Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.) - Stronger security with larger DH groups - RFC 8268 compliance Related to Termix-SSH/Support#205 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: clarify that hostname/FQDN is supported in IP address field (#529) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open… * feat: show terminal title in tab name (#579) * Temporary merge for 1.11.1 syncing (#543) * fix: remote translations * feat: support OIDC configuration via environment variables (#531) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: support OIDC configuration via environment variables Add support for configuring OIDC authentication through environment variables, enabling containerized deployments without database access: - OIDC_CLIENT_ID - OIDC_CLIENT_SECRET - OIDC_ISSUER_URL - OIDC_AUTHORIZATION_URL - OIDC_TOKEN_URL - OIDC_USERINFO_URL (optional) - OIDC_IDENTIFIER_PATH (optional, default: "sub") - OIDC_NAME_PATH (optional, default: "name") - OIDC_SCOPES (optional, default: "openid email profile") Environment variables take priority over database configuration. Closes Termix-SSH/Support#16 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: add modern DH group KEX algorithms for better compatibility (#530) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: add modern DH group KEX algorithms for better compatibility Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms which are supported by ssh2 library but were not configured in Termix. These algorithms provide: - Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.) - Stronger security with larger DH groups - RFC 8268 compliance Related to Termix-SSH/Support#205 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: clarify that hostname/FQDN is supported in IP address field (#529) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal dir… * fix: allow OIDC JIT user creation when registration is disabled (#578) * Temporary merge for 1.11.1 syncing (#543) * fix: remote translations * feat: support OIDC configuration via environment variables (#531) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: support OIDC configuration via environment variables Add support for configuring OIDC authentication through environment variables, enabling containerized deployments without database access: - OIDC_CLIENT_ID - OIDC_CLIENT_SECRET - OIDC_ISSUER_URL - OIDC_AUTHORIZATION_URL - OIDC_TOKEN_URL - OIDC_USERINFO_URL (optional) - OIDC_IDENTIFIER_PATH (optional, default: "sub") - OIDC_NAME_PATH (optional, default: "name") - OIDC_SCOPES (optional, default: "openid email profile") Environment variables take priority over database configuration. Closes Termix-SSH/Support#16 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: add modern DH group KEX algorithms for better compatibility (#530) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: add modern DH group KEX algorithms for better compatibility Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms which are supported by ssh2 library but were not configured in Termix. These algorithms provide: - Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.) - Stronger security with larger DH groups - RFC 8268 compliance Related to Termix-SSH/Support#205 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: clarify that hostname/FQDN is supported in IP address field (#529) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL r… * feat: add file manager sorting by name, date, and size (#582) * Temporary merge for 1.11.1 syncing (#543) * fix: remote translations * feat: support OIDC configuration via environment variables (#531) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: support OIDC configuration via environment variables Add support for configuring OIDC authentication through environment variables, enabling containerized deployments without database access: - OIDC_CLIENT_ID - OIDC_CLIENT_SECRET - OIDC_ISSUER_URL - OIDC_AUTHORIZATION_URL - OIDC_TOKEN_URL - OIDC_USERINFO_URL (optional) - OIDC_IDENTIFIER_PATH (optional, default: "sub") - OIDC_NAME_PATH (optional, default: "name") - OIDC_SCOPES (optional, default: "openid email profile") Environment variables take priority over database configuration. Closes Termix-SSH/Support#16 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: add modern DH group KEX algorithms for better compatibility (#530) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to open terminal directly (#156) (#503) * fix: resolve merge conflict artifacts in dev-1.10.1 - Fix missing closing tags in AppView.tsx NetworkGraphView - Fix incomplete catch blocks in server-stats.ts and db/index.ts - Fix missing closing brace in en.json ports section - Fix HostManagerApp.tsx import path - Fix stats-widgets.ts type definition - Fix schema.ts networkTopology table definition - Add type annotations in user-data-import.ts * feat: support URL routes to open terminal directly (#156) - Add /terminal/{hostNameOrId} route for new format - Keep /hosts/{id}/terminal for backward compatibility - Smart detection: numeric IDs for ID lookup, otherwise name lookup - Clean URL after opening to prevent duplicate on refresh - Show toast error when host not found --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Ctrl+Alt key remapping for browser-blocked shortcuts (#501) Browsers intercept Ctrl+W/T/N/Q, making them unusable in terminal. This adds Ctrl+Alt+<key> as an alternative that sends Ctrl+<key>. - Ctrl+Alt+W → Ctrl+W (nano search, delete word) - Ctrl+Alt+T → Ctrl+T (transpose chars) - Ctrl+Alt+N → Ctrl+N (next line) - Ctrl+Alt+Q → Ctrl+Q (XON flow control) Fixes Termix-SSH/Support#407 * feat: remove locales * New Crowdin updates (#504) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * feat: add option to disable update checker (#502) * feat: add option to disable update checker Add a new setting in User Profile > Settings to disable automatic update checking on startup and dashboard. - Adds 'Disable Update Check' toggle in profile settings - Skips GitHub API calls when disabled (reduces network requests) - Works for both web app and Electron client Fixes Termix-SSH/Support#410 * feat: remove locales --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * New Crowdin updates (#505) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * feat: add crowdin i18n * feat: remove locales * New Crowdin updates (#506) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations en.json (Norwegian) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Finnish) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Bulgarian) * New translations en.json (Indonesian) * New translations en.json (Hindi) * New translations en.json (Bengali) * New translations en.json (Thai) * feat: update readme * feat: update readme * feat: update credential editor to use submitting system and add health monitor * feat: added toggle for command pallete * feat: added close button on tab dropdown * feat: added sidebar management and improved some host manager UI/UX * feat: re-added missing users.ts route from merge * feat: add toggle for password reset feature in admin settings (#508) * feat: add sudo support for file manager operations (#509) * fix: add sudo support for listFiles and improve permission error handling (#512) * feat: add sudo support for file manager operations * fix: add sudo support for listFiles and improve permission error handling --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix sudo password dialog ui, add totp/pass reset limiting, and refreshed users screen when auth is outdated * feat: add copy password button and fixed new line carriage issues and backend crash for auth key * feat: added quick connection system (ad-hoc) * Enter Key for Quick Login (#513) * feat: added -r and -l support for tunnels * feat: begin dashboard overhaul by splitting into cards and adding customization * feat: improved full screen apps, overhauled dashboard, updated server stats ui, etc. * feat: add auth.tsx suppot for fullscreen * feat: greatly improve network graph ui/ux and migrated to use translations and theme system * feat: update to use blacksmith * feat: improve ui for customized tabs and hide add/edit host/credential when submiting * feat: add warpgate support with a dialog (terminal only) * feat: expand warpgate to docker/file manager * fix: docker not working wtih warpgate and none auth failing for terminal * fix: prevent owner permission loss when sharing host to own role (#514) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * fix: prevent owner permission loss when sharing host to own role Fixes #391 --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: SSH key passphrase not passed for Docker and Tunnel (#521) * perf: optimize Host Manager for large host lists - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. * fix: SSH key passphrase not passed to ssh2 for Docker and Tunnel Database field is `key_password` but code used `keyPassword`. Added fallback to check both field names. Affected: - docker.ts: Docker SSH connections with encrypted keys - tunnel.ts: Tunnel connections with encrypted keys --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * perf: optimize Host Manager for large host lists (#520) - Add ServerStatusContext for shared status polling (reduces API calls from N to 1) - Move TooltipProvider to component root (eliminates N context instances) - Add pagination with "Show More" button (limits initial DOM nodes per folder) Fixes performance issues when managing ~1000 hosts with status monitoring enabled. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: add missing mimeTypes definition for image preview (#518) Fixes Termix-SSH/Support#408 * fix: prevent session reset when updating host properties (#517) Move WebSocket cleanup logic to a separate unmount-only effect to prevent SSH sessions from being closed when host properties are updated. Closes Termix-SSH/Support#401 * fix: backend type error * feat: make terminal connections more resilient, added connection log, and fixed https/proxy reconnection loop (issue #385) * feat: improved conneciton log ui/logic * feat: improved conneciton log ui/logic * feat: expanded connection log to work across all components (readying for release) * feat: update readme * feat: update readme * fix: build error * fix: build error * fix: changed ver * chore: clean up * chore: continue clean up * fix: remove attempts remaining and fix electron errors and some connection log ui inconsistencies * fix: added missing nginx routes and fixed sudo password copy with sudo password autofil field * fix: update readme and run cleaner * fix: update readme * fix: update readme * fix: update readme * feat: update chinese readme * feat: add modern DH group KEX algorithms for better compatibility Add diffie-hellman-group15/16/17/18-sha512 key exchange algorithms which are supported by ssh2 library but were not configured in Termix. These algorithms provide: - Better compatibility with modern SSH servers (FreeBSD, OpenBSD, etc.) - Stronger security with larger DH groups - RFC 8268 compliance Related to Termix-SSH/Support#205 --------- Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> * feat: clarify that hostname/FQDN is supported in IP address field (#529) * Feature request network graph * Fixing PR442: - Fixed: - UI design elemets - UI and button colors - JSON export - recent activity is default again - Removed: - Online/Offline UI labels - left-click menu on hosts - Added: - small pulsing dot inside the hosts to indicate online status like in the left bar * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker * Handle enter button (#481) * Update Crowdin configuration file * Update Crowdin configuration file * Update Linux Portable section with AUR link (#474) * fix: file manager incorrectly decoding/encoding when editing files (#476) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: build error on docker (#477) * fix: electron build errors and skip macos job * fix: testflight submit failure * fix: made submit job match build type * fix: resolve Vite build warnings for mixed static/dynamic imports (#473) * Update Crowdin configuration file * Update Crowdin configuration file * fix: resolve Vite build warnings for mixed static/dynamic imports - Convert all dynamic imports of main-axios.ts to static imports (10 files) - Convert all dynamic imports of sonner to static imports (4 files) - Add manual chunking configuration to vite.config.ts for better bundle splitting - react-vendor: React and React DOM - ui-vendor: Radix UI, lucide-react, clsx, tailwind-merge - monaco: Monaco Editor - codemirror: CodeMirror and related packages - Increase chunkSizeWarningLimit to 1000kB This resolves Vite warnings about mixed import strategies preventing proper code-splitting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * fix: file manager incorrectly decoding/encoding when editing files (made base64/utf8 dependent) * fix: build error on docker --------- Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> * Increase max old space size for npm builds * Increase Node.js memory limit in Dockerfile * Remove NODE_OPTIONS from build commands in Dockerfile * Change runner to blacksmith-4vcpu-ubuntu-2404 * fix: build error on docker * Add handle on enter button; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> * fix: remove top tech * fix: update readme * fix: prevent long container names from overflowing card (#496) Added min-w-0 to CardTitle to allow text truncation in flexbox. Without this, flex items have min-width: auto which prevents the truncate class from working properly. Fixes #411 * fix: use SFTP readdir for file listing to support non-Linux systems (#495) The file manager now uses SFTP readdir as the primary method for listing files, with ls -la as a fallback. This enables compatibility with MikroTik RouterOS and other non-Linux systems that don't have standard shell commands. Fixes #317 * fix: restore SSH connection timeout to 120s for 2FA authentication (#494) The timeout was reduced from 120s to 30s in v1.10, causing 2FA login failures. Users with keyboard-interactive authentication (TOTP/2FA) need sufficient time to enter their verification codes before the SSH connection times out. Fixes #404 * feat: add Docker container healthcheck (#493) * fix: owner should not be marked as shared when host is shared to their role (#492) * fix: use correct MIME types for image preview (#491) * fix: prevent session reset when updating host properties (#490) * fix: add shell creation timeout and improve error handling (#489) * fix: set default lineHeight to 1.0 for TUI apps compatibility (#488) * fix: delete all related data when removing user (#487) * fix: nginx permission denied on restricted kernels (#486) * fix: skip existing hosts and credentials during JSON import (#485) Added duplicate detection for SSH hosts (by ip+port+username) and credentials (by name) during import. Existing items are now skipped by default, or updated if replaceExisting option is enabled. This matches the existing behavior of importDismissedAlerts. Fixes #389 * feat: add firewall status widget for server stats (#484) * Feature: PWA (#479) * feat: add PWA support with offline capabilities - Add web app manifest with icons and theme configuration - Add service worker with cache-first strategy for static assets - Add useServiceWorker hook for SW registration - Add PWA meta tags and Apple-specific tags to index.html - Update vite.config.ts for optimal asset caching * Update package-lock.json * New Crowdin updates (#472) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Greek) * New translations en.json (Finnish) * New translations en.json (Hebrew) * New translations en.json (Hungarian) * New translations en.json (Italian) * New translations en.json (Japanese) * New translations en.json (Korean) * New translations en.json (Dutch) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (English) * New translations en.json (Vietnamese) * New translations en.json (German) * feat: add listening ports widget for server stats (#483) Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: fix network stats merge and add openapi jsdocs comments * feat: add workflow/config to auto generate openapi json * feat: remove locales * feat: support URL routes to … * fix: unable to delete OIDC user due to missing table cleanup (#576) deleteUserAndRelatedData was missing cleanup for networkTopology, dashboardPreferences, and opksshTokens tables. When deleting an OIDC user who had records in these tables, the final DELETE on users hit SQLITE_CONSTRAINT_FOREIGNKEY. Add explicit deletes for all three tables before the user row deletion. * fix: use lightweight wget for Docker healthcheck (#558) - Replace node -e healthcheck with wget (avoid spawning full Node.js process) - Increase start-period from 30s to 60s for slower machines * feat: add "Remember Me" option to login (#585) When checked, browser sessions get 30-day expiry (same as desktop) instead of the default 7-day. The flag is passed through the full login chain including TOTP verification flow. * feat: expand environment variables in file manager path bar (#583) Resolve $VAR and ~ paths via SSH echo before navigating. Add /ssh/resolvePath backend endpoint, resolveSSHPath API function, and intercept in loadDirectory. Fix confirmEditingPath not to prefix ~ or $ paths with /. * fix: add Ctrl+Shift+C keyboard shortcut for terminal copy (#581) Ctrl+Shift+C was not handled in the custom key event handler, so users had no keyboard shortcut to copy selected text from the terminal. Adds the shortcut alongside existing Cmd+C (macOS) support, copying the current selection to clipboard. * feat: add OIDC user allowlist for registration control (#580) Add allowed_users field to OIDC config supporting comma-separated patterns: exact emails (user@example.com), domain suffixes (@example.com), or empty for unrestricted access. Only new user registrations are checked; existing users and first-user setup are unaffected. * fix: OIDC redirect_uri incorrectly resolves to localhost (#577) The OIDC authorize endpoint used the client Origin header to build the redirect_uri. Desktop/mobile apps connecting to a remote server send their local origin (e.g. http://localhost:5173), which got force-rewritten to http://localhost:30001. This broke OIDC for all non-browser clients. Use req.protocol + req.get("Host") instead, which correctly resolves to the server's own address. trust proxy is already enabled so this works behind reverse proxies too. * fix: keep terminal tab open on connection failure (#574) When SSH connection fails before being established, the terminal tab auto-closes immediately, leaving no error message visible to the user. Added wasConnectedRef to track whether the connection was ever established. Now only auto-closes tab on disconnect if it was previously connected. If never connected, shows error message instead. * fix: prevent restart loop when PUID/PGID is set to 0 (#571) When PUID=0, usermod sets the node user's UID to 0 (root), then gosu re-executes the script as node — but since node is now UID 0, the id check passes again, causing an infinite loop. Skip the gosu step when PUID=0 since the process is already root. * feat: add README translations for 12 additional languages (#569) Add translated README files for: Japanese, Korean, French, German, Spanish, Portuguese (BR), Russian, Arabic, Hindi, Turkish, Vietnamese, and Italian. Update language navigation bar in all README files including existing English and Chinese versions. * fix: allow OIDC users to export database without password (#575) OIDC users have no password, but the export endpoint unconditionally required password authentication. This reuses the same OIDC branch pattern already implemented in the import endpoint: skip password validation for OIDC users and authenticate via authenticateOIDCUser instead. Frontend now also skips the password input for OIDC users. * fix: SSH session leak — SFTP channel reuse + shared connection pool (#556) - Cache SFTP channel per session in file-manager, reuse across all operations - Remove all sftp.end() calls, channel lifecycle follows session - Auto-rebuild SFTP channel on error/close events - Extract SSHConnectionPool from server-stats into shared module - Factory-based pool API: getConnection(key, factory) / withConnection() - Migrate server-stats and tunnel killRemoteTunnelByMarker to shared pool - Refactor tunnel kill from callback hell to async/await Fixes: Termix-SSH/Support#485 * fix: handle DEC private mode sequences in syntax highlighter (#562) Extend CSI parameter byte matching to include ?, >, =, ! per ECMA-48. Previously sequences like \x1b[?1h and \x1b[?25l were not recognized as ANSI segments and fell through to plain text processing. * fix: catch disconnected client error in listFiles fallback (#564) When SFTP times out and the fallback calls client.exec() on an already-disconnected SSH client, the synchronous throw was not caught, crashing the backend process. * fix: forward Shift+Tab as backtab escape sequence (#563) Explicitly handle Shift+Tab in the custom key event handler by sending \x1b[Z (CSI Z) directly, with preventDefault to stop browser/WebView focus navigation from consuming the keystroke. * fix: disable font ligatures in terminal by default (#561) Nerd Fonts ligatures cause != to render as ≠, <= as ≤, etc. This is confusing for terminal use and breaks cursor positioning. * fix: bypass ls alias in file manager fallback (#560) - Add --color=never to command ls in SFTP fallback path - Use /bin/ls absolute path in sudo fallback to avoid alias/wrapper * feat: add overwrite option for JSON host import (#559) - Add overwrite mode to bulk-import endpoint, matching by ip:port:username - Import button now shows dropdown with "skip existing" and "overwrite existing" options - Response includes created/updated/skipped/failed counts * fix: status check tcpPing causing kex_exchange_identification flood in sshd logs (#557) - Complete SSH identification exchange before closing socket in tcpPing - Read server banner, send client identification string, then close gracefully - Prevents sshd from logging kex_exchange_identification errors on every ping - Increase default statusCheckInterval from 30s to 60s * fix: add WebSocket protocol-level ping to prevent proxy timeouts (#572) The existing application-level ping (JSON message via setInterval) stops working when the browser tab is backgrounded due to timer throttling. Reverse proxies like Cloudflare (100s) and Nginx Proxy Manager (60s) then drop the idle WebSocket connection. Add server-side ws.ping() every 30s for both terminal and docker console WebSocket servers. Protocol-level pings are handled by the browser's WebSocket implementation, unaffected by tab throttling. * feat: embed backend server in Electron desktop app (#539) * feat: embed backend server in Electron desktop app - Fork backend process on app startup (production mode only) - Store data in userData/server-data for desktop users - Unpack dist/ and native modules (better-sqlite3, ssh2) from asar - Resolve asar vs asar.unpacked paths for forked process - Serve frontend static files from Express for iframe auth flow - Add SPA fallback for non-API routes - Graceful shutdown with SIGTERM + 5s force kill - Add get-embedded-server-status IPC handler * fix: improve electron embedded server reliability - Extract duplicate fetch polyfill to shared httpFetch function - Wait for backend ready before creating window (15s timeout) - Use IPC message for graceful shutdown (SIGTERM doesn't work on Windows) - Simplify SPA fallback to use Accept header instead of route blacklist - Add IPC shutdown handler in backend starter * feat: system tray minimize and runtime server switching * fix: resolve all 274 ESLint errors in backend source files (#591) - Remove unused imports and variables (110 no-unused-vars) - Replace explicit any with proper types (80 no-explicit-any) - Add comments to intentionally empty catch blocks (66 no-empty) - Fix no-extra-boolean-cast, prefer-const, no-async-promise-executor - No logic changes, lint-only cleanup * fix: add missing clipboard shortcuts for terminal and docker console (#589) Terminal and Docker Console were missing Ctrl+Shift+C (copy selection), Ctrl+Insert (copy), and Shift+Insert (paste) shortcuts. Docker Console also lacked Ctrl+V paste entirely. Added consistent clipboard key handlers to both components. * fix: resolve all ESLint errors and increase CI heap size (#588) * fix: resolve all ESLint errors blocking CI - Downgrade mass legacy violations to warnings (no-unused-vars, no-explicit-any, no-empty, no-unused-expressions) - Turn off no-control-regex (terminal app uses control chars) - Ignore dist/release/Mobile dirs from linting - Auto-fix prefer-const, no-extra-boolean-cast - Fix real bugs: async promise executor, rules-of-hooks, dupe-else-if, constant-binary-expression, case-declarations - Run prettier --write on all files * fix: increase Node.js heap size for CI build step vite build OOMs on 2vCPU runner with default heap limit. Set NODE_OPTIONS=--max-old-space-size=4096 to prevent it. --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: reduce excessive disk writes from unconditional database persistence (#590) The in-memory database was serialized, encrypted, and written to disk every 15 seconds regardless of whether any data had changed. Combined with the 2-second debounced save trigger on every modification, this caused ~1GB/hour of disk writes even when idle. Add a dirty flag so the periodic save only writes when data has actually changed, and increase the safety-net interval from 15 seconds to 5 minutes. Triggered saves (on actual data modifications) continue to fire after the existing 2-second debounce. Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix: opkssh 404 and browser issues * fix: resolve backend TypeScript strict compilation errors (#592) Fix 56 type errors under tsconfig.node.json caused by overly broad unknown/Record<string, unknown> types from the ESLint cleanup. - Add JumpHostConfig interface for jump host chain resolution - Use proper types for resolvedCredentials, ConnectConfig, ProxyNode - Fix setWindow call to pass all 4 required arguments - Remove duplicate responseTimeout declarations in same scope - Add missing ClientChannel import * fix: clear Electron partition cookies on auth failure and logout (#599) When the Docker container is recreated, a new JWT secret is generated and all existing tokens become invalid. The 401 interceptor clears localStorage and document.cookie, but the Electron persistent partition cookies (partition: "persist:termix") are managed by Chromium and not accessible via document.cookie. This leaves the stale token in place, causing an infinite 401 retry loop and UI flickering. Add a clear-session-cookies IPC handler in the main process that uses session.cookies API to remove all partition cookies. Invoke it from the 401 interceptor and logoutUser function in the renderer. * refactor: unify Drizzle schema property names to camelCase (#598) * feat: add bulk host settings editing with multi-select UI Add PATCH /ssh/bulk-update endpoint for partial updates on multiple hosts. Frontend adds selection mode with checkboxes, folder-level select-all, and a floating action bar for monitoring, features, folder, and pin operations. * fix: correct Drizzle schema field name access for SSH credentials The sshCredentials schema uses mixed naming: private_key and key_password (snake_case) but authType and keyType (camelCase). Multiple files accessed these fields with wrong names, causing undefined values at runtime. Fixed direct bugs: - docker.ts: host.keyPassword -> host.key_password - docker-console.ts: jumpHost.keyPassword -> jumpHost.key_password - auth-manager.ts: cred.privateKey -> cred.private_key - auth-manager.ts: cred.passphrase -> cred.key_password Cleaned up redundant fallback patterns (e.g. credential.auth_type || credential.authType) across 8 files to use the correct property name directly. * refactor: unify Drizzle schema property names to camelCase Rename 18 snake_case Drizzle schema properties to camelCase across users, sshData, and sshCredentials tables. SQL column names unchanged, no database migration needed. This fixes the root cause of field name mismatch bugs where code accessed Drizzle results using camelCase but schema used snake_case. Updated all references across 21 files: routes, SSH modules, crypto utilities, type definitions, and field encryption mappings. * feat: add bulk host settings editing with multi-select UI (#596) Add PATCH /ssh/bulk-update endpoint for partial updates on multiple hosts. Frontend adds selection mode with checkboxes, folder-level select-all, and a floating action bar for monitoring, features, folder, and pin operations. * feat: add global default for status check and metrics intervals (#595) Add global monitoring interval settings that apply to all hosts by default, with per-host override capability. Hosts use the global default unless explicitly configured with a custom interval. * fix: shared credentials fail for OIDC users due to missing re-encryption (#593) When an admin shares a host with an OIDC user who hasn't logged in yet, a pending shared credential is created with needsReEncryption=true. The OIDC callback login path was missing the call to reEncryptPendingCredentialsForUser(), so the credential stayed pending forever. Additionally, server-stats.ts accessed the shared credential without a null check, causing a crash. - Add reEncryptPendingCredentialsForUser() call to OIDC callback login - Add null guard for getSharedCredentialForUser() in server-stats.ts * feat: SSH session persistence across browser refresh (#594) * feat: decouple SSH session lifecycle from WebSocket connections SSH sessions now persist independently of browser tab state. When a WebSocket disconnects (tab close/refresh), the SSH connection is detached rather than destroyed, allowing reattachment within a configurable idle timeout (default 30 min). - Add TerminalSessionManager singleton with output buffering, idle timeout, health checks, and per-user session limits - Refactor terminal.ts to route SSH state through session manager - Frontend tracks session IDs in localStorage for reconnection - Tabs persist to localStorage and restore on page reload - Add GET/POST /terminal/session_settings API endpoints - Clear session storage on logout * fix: resolve session persistence bugs found during code review - Fix detachWs timeout leak on double-detach (clear existing timeout first) - Fix healthCheck mutating Map during iteration (collect IDs first) - Capture sessionId at stream bind time to prevent cross-session data leakage - Add session destruction in OPKSSH/auth error paths that previously leaked - Add session destruction in shell init early-return paths - Reset isConnecting flag in attachSession handler - Use current terminal dimensions in sessionExpired handler (not stale closure) - Fix nextTabId race condition with synchronous initialization from restored tabs - Validate restored currentTab against actual restored tabs - Add clearTermixSessionStorage to logout error path * fix: correct raw SQL field name mismatches in crypto and credential routes (#601) Fix camelCase/snake_case mismatches left after #598 schema refactor: - credentials.ts: 5 remaining snake_case fields in Drizzle insert/update - data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns snake_case columns, causing undefined values and silent data loss - lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword), migrateRecordSensitiveFields() now uses propertyToColumn() to resolve snake_case keys from raw SQL results * feat: add per-host SSH keepalive configuration (#603) * fix: correct raw SQL field name mismatches in crypto and credential routes Fix camelCase/snake_case mismatches left after #598 schema refactor: - credentials.ts: 5 remaining snake_case fields in Drizzle insert/update - data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns snake_case columns, causing undefined values and silent data loss - lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword), migrateRecordSensitiveFields() now uses propertyToColumn() to resolve snake_case keys from raw SQL results * feat: add per-host SSH keepalive configuration MikroTik and similar devices ignore SSH-level keepalive requests, causing ssh2 to disconnect after keepaliveCountMax unanswered pings (default: 30s × 4 = 120s). Add keepaliveInterval and keepaliveCountMax to terminalConfig, allowing per-host override. Users can set keepaliveInterval to 0 to disable SSH keepalives and rely on TCP keepalive instead. Backend reads the values from hostConfig.terminalConfig sent via WebSocket. Frontend exposes the settings in the Advanced section of the terminal configuration tab. * fix: enable Electron desktop app to run standalone with embedded backend (#609) * fix: enable Electron desktop app to run standalone with embedded backend The Electron app already starts an embedded backend server via fork(), but the frontend had no awareness of it. On first launch, users were always prompted to enter a remote server URL even though a local backend was already running on localhost. - Add getEmbeddedServerStatus() to query the embedded backend via IPC - Add embeddedMode flag in main-axios.ts, detected at initialization - In embedded mode without a configured remote URL, getApiUrl() now routes each service to its own localhost port (30001, 30003, etc.) matching the dev-mode multi-port strategy - Auth.tsx checkServerConfig() detects embedded backend and skips the server configuration form, falling through to the standard login UI * fix: add explicit "Use Local Server" button and improve embedded detection The silent auto-detection of the embedded backend can fail due to IPC timing issues or backend startup failures. Add a visible "Use Local Server" button on the Server Configuration page that: - Probes http://localhost:30001/health to verify the backend is running - Sets embeddedMode and reinitializes API instances with per-port routing - Falls through to the standard login form (no iframe needed) Also adds setEmbeddedMode() export so the UI can explicitly activate embedded mode, and adds i18n keys for the new UI elements. * fix: disable asar for embedded backend, improve tray and health probe The forked backend process uses ESM imports and cannot resolve modules from inside an asar archive (NODE_PATH is CJS-only). Disabling asar ensures node_modules are plain files accessible to the backend. - Disable asar packaging so forked backend can resolve ESM imports - Remove node_modules exclusion from files config - Fix system tray: use nativeImage with template on macOS, add error handling, only minimize-to-tray when tray exists - Add retry mechanism for backend health probe (10 retries over ~30s) to handle slow backend startup - Always show "Use Local Server" button in Electron mode regardless of backend running status - Add file logging to userData for debugging GUI-launched app * feat: unified proxy + jump host pipeline with HTTP CONNECT support (#608) * fix: unify proxy and jump host connection paths SOCKS5 proxy and jump host logic were mutually exclusive — the SOCKS5 branch returned early, so jump hosts were never reached when both were configured. This affected terminal, file-manager, docker, and server-stats modules. Refactored all four modules to a unified pipeline: - createJumpHostChain() accepts optional socks5Config parameter - When both proxy and jump hosts are configured, the proxy socket is created to the first jump host internally, then used as transport - Three-branch flow: jumpHosts (with optional proxy) → proxy-only → direct - Enhanced error logging with hopIndex, totalHops, previousHop fields * feat: add HTTP CONNECT proxy support with mixed chain Extend ProxyNode.type to support 'http' alongside SOCKS4/5. New proxy-helper.ts provides: - createHttpConnectConnection(): HTTP CONNECT tunnel with Basic auth and optional existingSocket for chaining - createMixedProxyChainConnection(): routes each hop to SOCKS or HTTP CONNECT based on node type; pure-SOCKS chains still use the optimized SocksClient.createConnectionChain path - createProxyConnection(): unified entry point (backward-compatible alias for createSocks5Connection) - testProxyConnectivity(): connect through proxy to test target, measure latency socks5-helper.ts becomes a re-export shim — all existing import sites continue to work unchanged. * feat: add proxy connectivity test endpoint New POST /ssh/db/proxy/test API accepts singleProxy, proxyChain, and optional testTarget. Calls testProxyConnectivity() and returns success/latencyMs or error. Frontend testProxyConnection() function added to main-axios.ts. * feat: add connection path visualization and HTTP CONNECT UI - Proxy chain type selector now includes HTTP CONNECT option - Test Connection button calls /ssh/db/proxy/test with loading state - Connection path visualization shows the full route when proxy and/or jump hosts are configured: [You] → [Proxy] → [Jump Host] → [Target] - New i18n keys: httpConnect, testProxy, testingProxy, proxyTestSuccess, proxyTestFailed, connectionPath * fix: add Cache-Control no-store header to all API responses (#607) Backend API responses had no Cache-Control headers, making them vulnerable to caching by intermediate reverse proxies. This could cause stale data in the UI when Termix is deployed behind certain proxy configurations (e.g., SWAG, Pangolin). Add Cache-Control: no-store middleware to all 6 Express apps to prevent any proxy or browser from caching API responses. * fix: preserve external reverse proxy X-Forwarded headers in internal Nginx (#606) The internal Nginx proxy was overwriting X-Forwarded-Proto, X-Forwarded-Host, and X-Forwarded-Port with local values ($scheme, $http_host, $server_port), discarding headers set by the external reverse proxy. This caused getRequestOrigin() to always return http:// with the internal port for OpkSSH authentication URLs. Add map directives to preserve original X-Forwarded-* headers from the external proxy, falling back to local values when no external proxy is present. Also remove duplicate header directives in the WebSocket location. * fix: host update fails silently due to statsConfig double-serialization (#605) - Fix statsConfig double JSON.stringify in both frontend (createSSHHost, updateSSHHost) and backend (POST/PUT handlers). Frontend was pre- stringifying statsConfig before sending, then backend stringified again, corrupting the data after multiple edits and eventually causing Zod validation failures on the edit form. - Add missing sudoPassword field to createSSHHost and updateSSHHost submit data, which was being set in onSubmit but dropped during API call construction. - Add toast notification in handleFormError so users get visible feedback when form validation fails instead of silent no-op. * fix: Ctrl+C copies selection and clipboard error feedback (#604) * fix: correct raw SQL field name mismatches in crypto and credential routes Fix camelCase/snake_case mismatches left after #598 schema refactor: - credentials.ts: 5 remaining snake_case fields in Drizzle insert/update - data-crypto.ts: migrateUserSensitiveFields() accessed raw SQL records with camelCase keys (keyPassword, privateKey, etc.) but SELECT * returns snake_case columns, causing undefined values and silent data loss - lazy-field-encryption.ts: getSensitiveFieldsForTable() missing 4 ssh_data fields (sudoPassword, autostartPassword, autostartKey, autostartKeyPassword), migrateRecordSensitiveFields() now uses propertyToColumn() to resolve snake_case keys from raw SQL results * fix: Ctrl+C copies selection instead of sending SIGINT when text is selected When terminal has an active text selection, Ctrl+C now copies the selected text to clipboard and clears the selection. When nothing is selected, Ctrl+C sends SIGINT as before. Ctrl+Shift+C continues to work as a dedicated copy shortcut. Also adds toast notifications when clipboard operations fail instead of silently swallowing errors. Applied to both the main terminal and Docker console terminal. * fix: improve IPv6 connection handling with bracket stripping and ENETUNREACH hint (#602) Strip square brackets from IPv6 addresses at all SSH connection entry points (terminal, docker, docker-console, file-manager, server-stats, tunnel) to handle addresses entered as [::1] format. Add ENETUNREACH error hint in terminal.ts that detects IPv6 addresses and suggests checking Docker IPv6 network configuration. Also fix remaining snake_case field names in credentials.ts (same as #601). * fix: backend catch error * feat: improve selection UI * fix: remove tab naming * fix: squished ssh toolbar split ui buttons * feat: improve persistent tabs, data not saving for users, various ui inconsistencies * fix: tab context creating random context errors * fix: improve terminal session logic (not perfect)s * fix: terminal session logic creating errors and electron app not having UI to do local mode * fix: desktop build error * feat: update readme * feat: update readme * feat: update readme * Update README.md (#612) * fix: macos build failure and updated rest of the langs for readme * feat: update readmes to fix spelling error * feat: update readmes to fix spelling error * fix: oidc failures, opkssh not wokring, added some qol to selecting * fix: buyild erorr * fix: buyild erorr * fix: macos build error * fix: opkssh, macos copy/paste, admin settings global default backend crashes, oidc redirect issues, updated translations * chore: clean up files * fix: oidc http/https redirect issue * fix: build error * feat: update json import with all new fields --------- Co-authored-by: skyam25 <simonkyam@gmail.com> Co-authored-by: ZacharyZcR <PayasoNorahC@protonmail.com> Co-authored-by: Steven Josefs <s.josefs@gmx.de> Co-authored-by: Jefferson Nunn <89030989+jeffersonwarrior@users.noreply.github.com> Co-authored-by: Termix CI <ci@termix.dev> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Gaylord Julien <g.j@mailbox.org> Co-authored-by: Aditya Tawade <36890395+aditya-tawade@users.noreply.github.com> Co-authored-by: Deepansh Khurana <deepanshkhurana@outlook.com> Co-authored-by: Dylan Ysmal <Xenthys@users.noreply.github.com> Co-authored-by: TomyJan <TomyJan6@gmail.com> Co-authored-by: ywaf <52742690+ywaf@users.noreply.github.com>
2666 lines
159 KiB
JSON
2666 lines
159 KiB
JSON
{
|
||
"credentials": {
|
||
"credentialsViewer": "מציג אישורים",
|
||
"manageYourSSHCredentials": "נהל את פרטי ה-SSH שלך בצורה מאובטחת",
|
||
"addCredential": "הוסף אישור",
|
||
"createCredential": "צור אישור",
|
||
"editCredential": "עריכת אישורים",
|
||
"viewCredential": "הצג אישורים",
|
||
"duplicateCredential": "אישור כפול",
|
||
"deleteCredential": "מחיקת אישורים",
|
||
"updateCredential": "עדכון אישורים",
|
||
"credentialName": "שם פרטי הכניסה",
|
||
"credentialDescription": "תֵאוּר",
|
||
"username": "שם משתמש",
|
||
"searchCredentials": "חיפוש פרטי גישה...",
|
||
"selectFolder": "בחירת תיקייה",
|
||
"selectAuthType": "בחר סוג אימות",
|
||
"allFolders": "כל התיקיות",
|
||
"allAuthTypes": "כל סוגי האימות",
|
||
"uncategorized": "ללא קטגוריה",
|
||
"totalCredentials": "סַך הַכֹּל",
|
||
"keyBased": "מבוסס מפתח",
|
||
"passwordBased": "מבוסס סיסמה",
|
||
"folders": "תיקיות",
|
||
"noCredentialsMatchFilters": "אין אישורים התואמים את המסננים שלך",
|
||
"noCredentialsYet": "עדיין לא נוצרו אישורים",
|
||
"createFirstCredential": "צור את האישור הראשון שלך",
|
||
"failedToFetchCredentials": "נכשלה אחזור האישורים",
|
||
"credentialDeletedSuccessfully": "פרטי הכניסה נמחקו בהצלחה",
|
||
"failedToDeleteCredential": "מחיקת האישורים נכשלה",
|
||
"confirmDeleteCredential": "האם אתה בטוח שברצונך למחוק את פרטי הכניסה \"{{name}}\"?",
|
||
"credentialCreatedSuccessfully": "האישור נוצר בהצלחה",
|
||
"credentialUpdatedSuccessfully": "פרטי הכניסה עודכנו בהצלחה",
|
||
"failedToSaveCredential": "שמירת האישורים נכשלה",
|
||
"failedToFetchCredentialDetails": "נכשלה שליפת פרטי האישורים",
|
||
"failedToFetchHostsUsing": "נכשלה אחזור המארחים באמצעות אישור זה",
|
||
"loadingCredentials": "טוען אישורים...",
|
||
"retry": "נסה שוב",
|
||
"noCredentials": "אין אישורים",
|
||
"noCredentialsMessage": "עדיין לא הוספת אישורים. לחץ על \"הוסף אישור\" כדי להתחיל.",
|
||
"sshCredentials": "אישורי SSH",
|
||
"credentialsCount": "אישורים {{count}}",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"passwordRequired": "נדרשת סיסמה",
|
||
"sshKeyRequired": "נדרש מפתח SSH",
|
||
"credentialAddedSuccessfully": "פרטי הכניסה \"{{name}}\" נוספו בהצלחה",
|
||
"savingCredential": "שומר את פרטי הכניסה...",
|
||
"updatingCredential": "מעדכן את פרטי הכניסה...",
|
||
"general": "כְּלָלִי",
|
||
"description": "תֵאוּר",
|
||
"folder": "תיקייה",
|
||
"tags": "תגיות",
|
||
"addTagsSpaceToAdd": "הוסף תגיות (לחץ על רווח כדי להוסיף)",
|
||
"password": "סִיסמָה",
|
||
"key": "מַפְתֵחַ",
|
||
"sshPrivateKey": "מפתח פרטי SSH",
|
||
"upload": "העלאה",
|
||
"updateKey": "מפתח עדכון",
|
||
"keyPassword": "סיסמת מפתח",
|
||
"keyType": "סוג מפתח",
|
||
"keyTypeRSA": "RSA",
|
||
"keyTypeECDSA": "ECDSA",
|
||
"keyTypeEd25519": "Ed25519",
|
||
"basicInfo": "מידע בסיסי",
|
||
"authentication": "אימות",
|
||
"organization": "אִרגוּן",
|
||
"basicInformation": "מידע בסיסי",
|
||
"basicInformationDescription": "הזן את המידע הבסיסי עבור אישור זה",
|
||
"authenticationMethod": "שיטת אימות",
|
||
"authenticationMethodDescription": "בחר כיצד ברצונך לאמת עם שרתי SSH",
|
||
"organizationDescription": "ארגנו את האישורים שלכם באמצעות תיקיות ותגיות",
|
||
"enterCredentialName": "הזן שם פרטי כניסה",
|
||
"enterCredentialDescription": "הזן תיאור (אופציונלי)",
|
||
"enterUsername": "הזן שם משתמש",
|
||
"nameIsRequired": "נדרש שם פרטי כניסה",
|
||
"usernameIsRequired": "נדרש שם משתמש",
|
||
"authenticationType": "סוג אימות",
|
||
"passwordAuthDescription": "השתמש באימות סיסמה",
|
||
"sshKeyAuthDescription": "השתמש באימות מפתח SSH",
|
||
"passwordIsRequired": "נדרשת סיסמה",
|
||
"sshKeyIsRequired": "נדרש מפתח SSH",
|
||
"sshKeyType": "סוג מפתח SSH",
|
||
"privateKey": "מפתח פרטי",
|
||
"enterPassword": "הזן סיסמה",
|
||
"enterPrivateKey": "הזן מפתח פרטי",
|
||
"keyPassphrase": "סיסמת מפתח",
|
||
"enterKeyPassphrase": "הזן סיסמת מפתח (אופציונלי)",
|
||
"keyPassphraseOptional": "אופציונלי: השאר ריק אם למפתח שלך אין ביטוי סיסמה",
|
||
"leaveEmptyToKeepCurrent": "השאר ריק כדי לשמור על הערך הנוכחי",
|
||
"uploadKeyFile": "העלאת קובץ מפתח",
|
||
"generateKeyPairButton": "צור זוג מפתחות",
|
||
"generateKeyPair": "צור זוג מפתחות",
|
||
"generateKeyPairDescription": "צור זוג מפתחות SSH חדש. אם ברצונך להגן על המפתח באמצעות סיסמה, הזן אותה תחילה בשדה סיסמת המפתח למטה.",
|
||
"deploySSHKey": "פריסת מפתח SSH",
|
||
"deploySSHKeyDescription": "פריסת מפתח ציבורי לשרת היעד",
|
||
"sourceCredential": "אישורי מקור",
|
||
"targetHost": "מארח היעד",
|
||
"deploymentProcess": "תהליך הפריסה",
|
||
"deploymentProcessDescription": "פעולה זו תוסיף בבטחה את המפתח הציבורי לקובץ ~/.ssh/authorized_keys של מארח היעד מבלי להחליף מפתחות קיימים. הפעולה היא הפיכה.",
|
||
"chooseHostToDeploy": "בחר מארח לפריסה...",
|
||
"deploying": "פריסה...",
|
||
"name": "שֵׁם",
|
||
"noHostsAvailable": "אין מארחים זמינים",
|
||
"noHostsMatchSearch": "אין מארחים התואמים את החיפוש שלך",
|
||
"sshKeyGenerationNotImplemented": "תכונת יצירת מפתחות SSH בקרוב",
|
||
"connectionTestingNotImplemented": "תכונת בדיקת חיבור בקרוב",
|
||
"testConnection": "בדיקת חיבור",
|
||
"selectOrCreateFolder": "בחירה או יצירת תיקייה",
|
||
"noFolder": "אין תיקייה",
|
||
"orCreateNewFolder": "או ליצור תיקייה חדשה",
|
||
"addTag": "הוסף תג",
|
||
"saving": "חִסָכוֹן...",
|
||
"credentialId": "מזהה אישור",
|
||
"overview": "סקירה כללית",
|
||
"security": "בִּטָחוֹן",
|
||
"usage": "נוֹהָג",
|
||
"securityDetails": "פרטי אבטחה",
|
||
"securityDetailsDescription": "הצג מידע על אישורים מוצפנים",
|
||
"credentialSecured": "אישורים מאובטחים",
|
||
"credentialSecuredDescription": "כל המידע הרגיש מוצפן באמצעות AES-256",
|
||
"passwordAuthentication": "אימות סיסמה",
|
||
"keyAuthentication": "אימות מפתח",
|
||
"securityReminder": "תזכורת אבטחה",
|
||
"securityReminderText": "לעולם אל תשתפו את פרטי הגישה שלכם. כל הנתונים מוצפנים במצב מנוחה.",
|
||
"hostsUsingCredential": "מארחים המשתמשים באישור זה",
|
||
"noHostsUsingCredential": "אף מארח לא משתמש כרגע באישור זה",
|
||
"timesUsed": "פעמים בשימוש",
|
||
"lastUsed": "בשימוש אחרון",
|
||
"connectedHosts": "מארחים מחוברים",
|
||
"created": "נוצר",
|
||
"lastModified": "שונה לאחרונה",
|
||
"usageStatistics": "סטטיסטיקות שימוש",
|
||
"copiedToClipboard": "{{field}} הועתק ללוח",
|
||
"failedToCopy": "נכשל בהעתקה ללוח",
|
||
"sshKey": "מפתח SSH",
|
||
"createCredentialDescription": "צור אישור SSH חדש לגישה מאובטחת",
|
||
"editCredentialDescription": "עדכון פרטי האישורים",
|
||
"listView": "רְשִׁימָה",
|
||
"folderView": "תיקיות",
|
||
"unknownCredential": "לֹא יְדוּעַ",
|
||
"confirmRemoveFromFolder": "האם אתה בטוח שברצונך להסיר את \"{{name}}\" מהתיקייה \"{{folder}}\"? פרטי הכניסה יועברו לקטגוריה \"לא מסווג\".",
|
||
"removedFromFolder": "פרטי הכניסה \"{{name}}\" הוסרו בהצלחה מהתיקייה",
|
||
"failedToRemoveFromFolder": "הסרת האישורים מהתיקייה נכשלה",
|
||
"folderRenamed": "תיקיית \"{{oldName}}\" שמה שונה בהצלחה ל- \"{{newName}}\"",
|
||
"failedToRenameFolder": "נכשל שינוי שם התיקייה",
|
||
"movedToFolder": "פרטי הכניסה \"{{name}}\" הועברו בהצלחה ל- \"{{folder}}\"",
|
||
"failedToMoveToFolder": "העברת האישורים לתיקייה נכשלה",
|
||
"sshPublicKey": "מפתח ציבורי של SSH",
|
||
"publicKeyNote": "מפתח ציבורי הוא אופציונלי אך מומלץ לאימות מפתח",
|
||
"publicKeyUploaded": "מפתח ציבורי הועלה",
|
||
"uploadPublicKey": "העלאת מפתח ציבורי",
|
||
"uploadPrivateKeyFile": "העלאת קובץ מפתח פרטי",
|
||
"uploadPublicKeyFile": "העלאת קובץ מפתח ציבורי",
|
||
"privateKeyRequiredForGeneration": "נדרש מפתח פרטי ליצירת מפתח ציבורי",
|
||
"failedToGeneratePublicKey": "נכשל ביצירת המפתח הציבורי",
|
||
"generatePublicKey": "יצירה ממפתח פרטי",
|
||
"publicKeyGeneratedSuccessfully": "מפתח ציבורי נוצר בהצלחה",
|
||
"detectedKeyType": "סוג מפתח זוהה",
|
||
"detectingKeyType": "גילוי...",
|
||
"optional": "אופציונלי",
|
||
"generateKeyPairNew": "צור זוג מפתחות חדש",
|
||
"generateEd25519": "צור Ed25519",
|
||
"generateECDSA": "צור ECDSA",
|
||
"generateRSA": "צור RSA",
|
||
"keyTypeEcdsaP256": "ECDSA P-256 (SSH)",
|
||
"keyTypeEcdsaP384": "ECDSA P-384 (SSH)",
|
||
"keyTypeEcdsaP521": "ECDSA P-521 (SSH)",
|
||
"keyTypeDsa": "DSA (SSH)",
|
||
"keyTypeRsaSha256": "RSA-SHA2-256",
|
||
"keyTypeRsaSha512": "RSA-SHA2-512",
|
||
"keyPairGeneratedSuccessfully": "זוג המפתחות {{keyType}} נוצר בהצלחה",
|
||
"failedToGenerateKeyPair": "נכשל ביצירת זוג המפתחות",
|
||
"generateKeyPairNote": "צור זוג מפתחות SSH חדש ישירות. פעולה זו תחליף כל מפתח קיים בטופס.",
|
||
"invalidKey": "מפתח לא חוקי",
|
||
"detectionError": "שגיאת זיהוי",
|
||
"removing": "הסרה:",
|
||
"clickToEditCredential": "לחץ כדי לערוך את האישור",
|
||
"dragToMoveBetweenFolders": "גרור כדי לעבור בין תיקיות",
|
||
"keyBasedOnlyForDeployment": "ניתן לפרוס רק אישורים מבוססי מפתח SSH",
|
||
"publicKeyRequiredForDeployment": "נדרש מפתח ציבורי לפריסה",
|
||
"selectTargetHost": "אנא בחר מארח יעד",
|
||
"keyDeployedSuccessfully": "מפתח SSH נפרס בהצלחה",
|
||
"deploymentFailed": "הפריסה נכשלה",
|
||
"failedToDeployKey": "פריסת מפתח SSH נכשלה",
|
||
"clickToRenameFolder": "לחץ כדי לשנות את שם התיקייה",
|
||
"renameFolder": "שינוי שם התיקייה",
|
||
"idLabel": "תְעוּדַת זֶהוּת:"
|
||
},
|
||
"quickConnect": {
|
||
"title": "חיבור מהיר",
|
||
"description": "התחברות ישירה לטרמינל או למנהל קבצים מבלי לשמור תצורת מארח",
|
||
"ipAddress": "כתובת IP או שם מארח",
|
||
"port": "נָמָל",
|
||
"username": "שם משתמש",
|
||
"password": "סִיסמָה",
|
||
"key": "מפתח פרטי SSH",
|
||
"keyPassword": "סיסמת מפתח (אופציונלי)",
|
||
"keyType": "סוג מפתח",
|
||
"uploadFile": "העלאת קובץ",
|
||
"pasteKey": "הדבקת מפתח",
|
||
"credential": "תְעוּדָה",
|
||
"overrideUsername": "עקיפת שם משתמש של פרטי כניסה",
|
||
"overrideUsernameDesc": "השתמש בשם משתמש שונה מזה המאוחסן בפרטי האישור",
|
||
"connectTerminal": "התחברות לטרמינל",
|
||
"connectFileManager": "התחברות למנהל הקבצים",
|
||
"cancel": "לְבַטֵל",
|
||
"passwordRequired": "נדרשת סיסמה",
|
||
"keyRequired": "נדרש מפתח SSH",
|
||
"credentialRequired": "נדרשת בחירת אישורים",
|
||
"connectionEstablished": "החיבור נוצר בהצלחה",
|
||
"connectionFailed": "נכשל ביצירת החיבור",
|
||
"autoDetect": "זיהוי אוטומטי",
|
||
"authentication": "אימות"
|
||
},
|
||
"dragIndicator": {
|
||
"error": "שגיאה: {{error}}",
|
||
"dragging": "גרירה {{fileName}}",
|
||
"preparing": "מכין {{fileName}}",
|
||
"readySingle": "מוכן להורדה {{fileName}}",
|
||
"readyMultiple": "מוכן להוריד {{count}} קבצים",
|
||
"batchDrag": "גרור {{count}} קבצים לשולחן העבודה",
|
||
"dragToDesktop": "גרור לשולחן העבודה",
|
||
"canDragAnywhere": "ניתן לגרור קבצים לכל מקום בשולחן העבודה"
|
||
},
|
||
"sshTools": {
|
||
"title": "כלי SSH",
|
||
"closeTools": "סגור את כלי SSH",
|
||
"keyRecording": "רישום מפתח",
|
||
"startKeyRecording": "התחל הקלטת מפתח",
|
||
"stopKeyRecording": "עצירת הקלטת מפתח",
|
||
"selectTerminals": "בחר טרמינלים:",
|
||
"typeCommands": "פקודות הקלדה (כל המקשים נתמכים):",
|
||
"commandsWillBeSent": "פקודות יישלחו אל {{count}} הטרמינל/ים שנבחרו.",
|
||
"settings": "הגדרות",
|
||
"enableRightClickCopyPaste": "הפעלת העתקה/הדבקה באמצעות לחיצה ימנית",
|
||
"shareIdeas": "יש לכם רעיונות לגבי מה שצריך לבוא בהמשך עבור כלי SSH? שתפו אותם ב",
|
||
"scripts": {
|
||
"inputPlaceholder": "לדוגמה, פקודות מערכת, סקריפטים של Docker"
|
||
}
|
||
},
|
||
"snippets": {
|
||
"title": "קטעי טקסט",
|
||
"new": "קטע חדש",
|
||
"create": "צור קטע",
|
||
"edit": "עריכת קטע",
|
||
"run": "לָרוּץ",
|
||
"empty": "עדיין אין קטעי טקסט",
|
||
"emptyHint": "צור קטע טקסט לשמירת פקודות נפוצות",
|
||
"searchSnippets": "חיפוש קטעי טקסט...",
|
||
"name": "שֵׁם",
|
||
"description": "תֵאוּר",
|
||
"content": "פְּקוּדָה",
|
||
"namePlaceholder": "לדוגמה, הפעל מחדש את Nginx",
|
||
"descriptionPlaceholder": "תיאור אופציונלי",
|
||
"contentPlaceholder": "לדוגמה, sudo systemctl הפעל מחדש את nginx",
|
||
"nameRequired": "שם נדרש",
|
||
"contentRequired": "נדרשת פקודה",
|
||
"createDescription": "צור קטע פקודה חדש לביצוע מהיר",
|
||
"editDescription": "ערוך קטע פקודה זה",
|
||
"deleteConfirmTitle": "מחיקת קטע",
|
||
"deleteConfirmDescription": "האם אתה בטוח שברצונך למחוק את \"{{name}}\"?",
|
||
"createSuccess": "קטע הקוד נוצר בהצלחה",
|
||
"updateSuccess": "קטע הקוד עודכן בהצלחה",
|
||
"deleteSuccess": "קטע הטקסט נמחק בהצלחה",
|
||
"createFailed": "נכשלה יצירת קטע הקוד",
|
||
"updateFailed": "נכשל עדכון הקטע",
|
||
"deleteFailed": "מחיקת קטע הקוד נכשלה",
|
||
"failedToFetch": "נכשל באחזור קטעי הקוד",
|
||
"executeSuccess": "מבצע: {{name}}",
|
||
"copySuccess": "הועתק \"{{name}}\" ללוח",
|
||
"runTooltip": "הפעל את הקטע הזה בטרמינל",
|
||
"copyTooltip": "העתקת קטע ללוח",
|
||
"editTooltip": "ערוך קטע זה",
|
||
"deleteTooltip": "מחק את הקטע הזה",
|
||
"newFolder": "תיקייה חדשה",
|
||
"reorderSameFolder": "ניתן לסדר מחדש קטעי טקסט רק באותה תיקייה",
|
||
"reorderSuccess": "סידור מחדש של הקטעים בוצע בהצלחה",
|
||
"reorderFailed": "נכשל הסידור מחדש של קטעי הקוד",
|
||
"deleteFolderConfirm": "למחוק את התיקייה \"{{name}}\"? כל הקטעים יועברו לקטגוריה ללא קטגוריה.",
|
||
"deleteFolderSuccess": "התיקייה נמחקה בהצלחה",
|
||
"deleteFolderFailed": "מחיקת התיקייה נכשלה",
|
||
"updateFolderSuccess": "התיקייה עודכנה בהצלחה",
|
||
"createFolderSuccess": "תיקייה נוצרה בהצלחה",
|
||
"updateFolderFailed": "עדכון התיקייה נכשל",
|
||
"createFolderFailed": "יצירת התיקייה נכשלה",
|
||
"selectTerminals": "בחירת טרמינלים (אופציונלי)",
|
||
"executeOnSelected": "בצע ב- {{count}} טרמינל/ים שנבחרו",
|
||
"executeOnCurrent": "בצע במסוף הנוכחי (לחץ כדי לבחור מספר אפשרויות)",
|
||
"folder": "תיקייה",
|
||
"selectFolder": "בחר תיקייה או השאר ריק",
|
||
"noFolder": "אין תיקייה (ללא קטגוריה)",
|
||
"folderName": "שם התיקייה",
|
||
"folderNameRequired": "שם תיקייה נדרש",
|
||
"folderColor": "צבע התיקייה",
|
||
"folderIcon": "סמל תיקייה",
|
||
"preview": "תצוגה מקדימה",
|
||
"updateFolder": "עדכון תיקייה",
|
||
"createFolder": "צור תיקייה",
|
||
"editFolder": "עריכת תיקייה",
|
||
"editFolderDescription": "התאם אישית את תיקיית הקטעים שלך",
|
||
"createFolderDescription": "ארגנו את הקטעים שלכם בתיקיות"
|
||
},
|
||
"commandHistory": {
|
||
"title": "הִיסטוֹרִיָה",
|
||
"searchPlaceholder": "פקודות חיפוש...",
|
||
"noTerminal": "אין טרמינל פעיל",
|
||
"noTerminalHint": "פתח מסוף כדי לראות את היסטוריית הפקודות שלו.",
|
||
"empty": "עדיין אין היסטוריית פקודות",
|
||
"emptyHint": "בצע פקודות בטרמינל הפעיל כדי לבנות את ההיסטוריה שלו.",
|
||
"noResults": "לא נמצאו פקודות",
|
||
"noResultsHint": "אין פקודות תואמות ל-\"{{query}}\"",
|
||
"deleteSuccess": "הפקודה נמחקה מההיסטוריה",
|
||
"deleteFailed": "מחיקת הפקודה נכשלה.",
|
||
"deleteTooltip": "פקודת מחיקה",
|
||
"tabHint": "השתמש ב-Tab בטרמינל כדי להשלים אוטומטית מהיסטוריית הפקודות אם מופעלת בפרופיל המשתמש",
|
||
"authRequiredRefresh": "נדרש אימות. אנא רענן את הדף.",
|
||
"dataAccessLockedReauth": "גישת הנתונים נעולה. אנא אימות מחדש.",
|
||
"loading": "טוען היסטוריית פקודות...",
|
||
"error": "שגיאה בטעינת ההיסטוריה"
|
||
},
|
||
"splitScreen": {
|
||
"title": "מסך מפוצל",
|
||
"none": "אַף לֹא אֶחָד",
|
||
"twoSplit": "דו-כיווני",
|
||
"threeSplit": "3-כיווני",
|
||
"fourSplit": "4-כיווני",
|
||
"availableTabs": "כרטיסיות זמינות",
|
||
"dragTabsHint": "גררו טאבים לתאי הפריסה למטה כדי להקצות אותם",
|
||
"layout": "פריסת מסך מפוצל",
|
||
"dropHere": "שחררו את הכרטיסייה כאן",
|
||
"apply": "החל פיצול",
|
||
"clear": "פיצול ברור",
|
||
"selectMode": "בחירת מצב מסך מפוצל",
|
||
"helpText": "בחר כמה כרטיסיות ברצונך להציג בו זמנית",
|
||
"success": "מסך מפוצל הוחל בהצלחה",
|
||
"cleared": "מסך מפוצל נוקה",
|
||
"error": {
|
||
"noAssignments": "אנא הקצה לפחות כרטיסייה אחת לפריסה",
|
||
"fillAllSlots": "אנא מלאו את כל המשבצות {{count}} לפני הגשת מועמדות"
|
||
}
|
||
},
|
||
"homepage": {
|
||
"loggedInTitle": "מחובר/ת!",
|
||
"loggedInMessage": "אתה מחובר! השתמש בסרגל הצד כדי לגשת לכל הכלים הזמינים. כדי להתחיל, צור מארח SSH בכרטיסייה מנהל SSH. לאחר היצירה, תוכל להתחבר למארח זה באמצעות האפליקציות האחרות בסרגל הצד.",
|
||
"failedToLoadAlerts": "טעינת ההתראות נכשלה",
|
||
"failedToDismissAlert": "נכשלה סגירת ההתראה"
|
||
},
|
||
"serverConfig": {
|
||
"title": "תצורת שרת",
|
||
"description": "הגדר את כתובת ה-URL של שרת Termix כדי להתחבר לשירותי ה-backend שלך",
|
||
"serverUrl": "כתובת URL של השרת",
|
||
"enterServerUrl": "אנא הזן כתובת URL של שרת",
|
||
"testConnectionFirst": "אנא בדוק את החיבור תחילה",
|
||
"connectionSuccess": "החיבור הצליח!",
|
||
"connectionFailed": "החיבור נכשל",
|
||
"connectionError": "אירעה שגיאת חיבור",
|
||
"connected": "מְחוּבָּר",
|
||
"disconnected": "מְנוּתָק",
|
||
"configSaved": "התצורה נשמרה בהצלחה",
|
||
"saveFailed": "שמירת התצורה נכשלה",
|
||
"saveError": "שגיאה בשמירת התצורה",
|
||
"saving": "חִסָכוֹן...",
|
||
"saveConfig": "שמור תצורה",
|
||
"helpText": "הזן את כתובת ה-URL שבה פועל שרת ה-Termix שלך (לדוגמה, http://localhost:30001 או https://your-server.com)",
|
||
"warning": "אַזהָרָה",
|
||
"notValidatedWarning": "כתובת האתר לא אומתה - ודא שהיא נכונה",
|
||
"changeServer": "שנה שרת",
|
||
"mustIncludeProtocol": "כתובת השרת חייבת להתחיל ב-http:// או https://"
|
||
},
|
||
"versionCheck": {
|
||
"error": "שגיאת בדיקת גרסה",
|
||
"checkFailed": "נכשל בבדיקת עדכונים",
|
||
"upToDate": "האפליקציה מעודכנת",
|
||
"currentVersion": "אתה משתמש בגרסה {{version}}",
|
||
"updateAvailable": "עדכון זמין",
|
||
"newVersionAvailable": "גרסה חדשה זמינה! אתה מפעיל {{current}}, אבל {{latest}} זמין.",
|
||
"releasedOn": "יצא לאור בתאריך {{date}}",
|
||
"downloadUpdate": "הורד עדכון",
|
||
"dismiss": "לְפַטֵר",
|
||
"checking": "בודק עדכונים...",
|
||
"checkUpdates": "בדוק אם יש עדכונים",
|
||
"checkingUpdates": "בודק עדכונים...",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"updateRequired": "נדרש עדכון",
|
||
"updateDismissed": "הודעת העדכון נדחתה",
|
||
"noUpdatesFound": "לא נמצאו עדכונים"
|
||
},
|
||
"common": {
|
||
"close": "לִסְגוֹר",
|
||
"minimize": "לְצַמְצֵם",
|
||
"online": "באינטרנט",
|
||
"offline": "לא מקוון",
|
||
"continue": "לְהַמשִׁיך",
|
||
"maintenance": "תַחזוּקָה",
|
||
"degraded": "מוּשׁפָל",
|
||
"discord": "מַחֲלוֹקֶת",
|
||
"error": "שְׁגִיאָה",
|
||
"warning": "אַזהָרָה",
|
||
"info": "מידע",
|
||
"success": "הַצלָחָה",
|
||
"loading": "טְעִינָה...",
|
||
"required": "דָרוּשׁ",
|
||
"optional": "אופציונלי",
|
||
"connect": "לְחַבֵּר",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"creating": "יוצר...",
|
||
"clear": "בָּרוּר",
|
||
"toggleSidebar": "הפעלה/כיבוי סרגל צד",
|
||
"sidebar": "סרגל צד",
|
||
"home": "בַּיִת",
|
||
"expired": "פג תוקף",
|
||
"expiresToday": "פג תוקף היום",
|
||
"expiresTomorrow": "פג תוקף בעוד {{days}} ימים",
|
||
"updateAvailable": "עדכון זמין",
|
||
"sshPath": "נתיב SSH",
|
||
"localPath": "נתיב מקומי",
|
||
"appName": "טרמיקס",
|
||
"openInNewTab": "פתח בכרטיסייה חדשה",
|
||
"resetSidebarWidth": "איפוס רוחב הצד",
|
||
"dragToResizeSidebar": "גרור כדי לשנות את גודל הצד",
|
||
"noAuthCredentials": "אין אישורי אימות זמינים עבור מארח SSH זה",
|
||
"noReleases": "אין פרסומים",
|
||
"updatesAndReleases": "עדכונים ומהדורות",
|
||
"newVersionAvailable": "גרסה חדשה ({{version}}) זמינה.",
|
||
"failedToFetchUpdateInfo": "נכשל באחזור פרטי העדכון",
|
||
"preRelease": "טרום-הפצה",
|
||
"loginFailed": "הכניסה נכשלה",
|
||
"noReleasesFound": "לא נמצאו מהדורות.",
|
||
"yourBackupCodes": "קודי הגיבוי שלך",
|
||
"sendResetCode": "שלח קוד איפוס",
|
||
"verifyCode": "אימות קוד",
|
||
"resetPassword": "איפוס סיסמה",
|
||
"resetCode": "איפוס קוד",
|
||
"newPassword": "סיסמה חדשה",
|
||
"folder": "תיקייה",
|
||
"file": "קוֹבֶץ",
|
||
"renamedSuccessfully": "שם הקודם הצליח",
|
||
"deletedSuccessfully": "נמחק בהצלחה",
|
||
"noTunnelConnections": "לא הוגדרו חיבורי מנהרה",
|
||
"sshTools": "כלי SSH",
|
||
"english": "אַנגְלִית",
|
||
"chinese": "סִינִית",
|
||
"german": "גֶרמָנִיָת",
|
||
"cancel": "לְבַטֵל",
|
||
"username": "שם משתמש",
|
||
"name": "שֵׁם",
|
||
"login": "כְּנִיסָה לַמַעֲרֶכֶת",
|
||
"logout": "התנתק",
|
||
"register": "לִרְשׁוֹם",
|
||
"password": "סִיסמָה",
|
||
"version": "גִרְסָה",
|
||
"confirmPassword": "אשר סיסמה",
|
||
"back": "בְּחֲזָרָה",
|
||
"email": "אֶלֶקטרוֹנִי",
|
||
"submit": "לְהַגִישׁ",
|
||
"change": "לְשַׁנוֹת",
|
||
"save": "לְהַצִיל",
|
||
"saving": "חִסָכוֹן...",
|
||
"delete": "לִמְחוֹק",
|
||
"edit": "לַעֲרוֹך",
|
||
"add": "לְהוֹסִיף",
|
||
"search": "לְחַפֵּשׂ",
|
||
"confirm": "לְאַשֵׁר",
|
||
"yes": "כֵּן",
|
||
"no": "לֹא",
|
||
"ok": "בְּסֵדֶר",
|
||
"enabled": "מופעל",
|
||
"disabled": "נָכֶה",
|
||
"important": "חָשׁוּב",
|
||
"notEnabled": "לא מופעל",
|
||
"settingUp": "הֲקָמָה...",
|
||
"next": "הַבָּא",
|
||
"previous": "קוֹדֵם",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"settings": "הגדרות",
|
||
"profile": "פּרוֹפִיל",
|
||
"help": "עֶזרָה",
|
||
"about": "אוֹדוֹת",
|
||
"language": "שָׂפָה",
|
||
"autoDetect": "זיהוי אוטומטי",
|
||
"changeAccountPassword": "שנה את סיסמת החשבון שלך",
|
||
"passwordResetTitle": "איפוס סיסמה",
|
||
"passwordResetDescription": "אתה עומד לאפס את הסיסמה שלך. פעולה זו תנתק אותך מכל ההפעלות הפעילות.",
|
||
"enterSixDigitCode": "הזן את הקוד בן 6 הספרות מיומני המכולה של docker עבור המשתמש:",
|
||
"enterNewPassword": "הזן את הסיסמה החדשה שלך עבור המשתמש:",
|
||
"passwordsDoNotMatch": "הסיסמאות אינן תואמות",
|
||
"passwordMinLength": "הסיסמה חייבת להיות באורך של לפחות 6 תווים",
|
||
"passwordResetSuccess": "איפוס הסיסמה בוצע בהצלחה! כעת תוכל להתחבר עם הסיסמה החדשה שלך.",
|
||
"failedToInitiatePasswordReset": "נכשלה הפעלת איפוס הסיסמה",
|
||
"failedToVerifyResetCode": "נכשל אימות קוד האיפוס",
|
||
"failedToCompletePasswordReset": "נכשל השלמת איפוס הסיסמה",
|
||
"documentation": "תיעוד",
|
||
"retry": "נסה שוב",
|
||
"checking": "בודק...",
|
||
"checkingDatabase": "בודק חיבור למסד הנתונים...",
|
||
"checkingAuthentication": "בודק אימות...",
|
||
"actions": "פעולות",
|
||
"remove": "לְהַסִיר",
|
||
"revoke": "לְבַטֵל",
|
||
"create": "לִיצוֹר",
|
||
"update": "לְעַדְכֵּן"
|
||
},
|
||
"nav": {
|
||
"home": "בַּיִת",
|
||
"hosts": "מארחים",
|
||
"credentials": "אישורים",
|
||
"terminal": "מָסוֹף",
|
||
"docker": "דוקר",
|
||
"tunnels": "מנהרות",
|
||
"fileManager": "מנהל הקבצים",
|
||
"serverStats": "סטטיסטיקות שרת",
|
||
"admin": "מנהל",
|
||
"userProfile": "פרופיל משתמש",
|
||
"tools": "כְּלֵי עֲבוֹדָה",
|
||
"snippets": "קטעי טקסט",
|
||
"newTab": "כרטיסייה חדשה",
|
||
"splitScreen": "מסך מפוצל",
|
||
"closeTab": "סגור את הכרטיסייה",
|
||
"sshManager": "מנהל SSH",
|
||
"hostManager": "מנהל מארח",
|
||
"cannotSplitTab": "לא ניתן לפצל את הכרטיסייה הזו",
|
||
"tabNavigation": "ניווט בטאבים",
|
||
"hostTabTitle": "{{username}}@{{ip}}:{{port}}",
|
||
"copyPassword": "העתקת סיסמה",
|
||
"copySudoPassword": "העתקת סיסמת סודו",
|
||
"passwordCopied": "הסיסמה הועתקה ללוח",
|
||
"sudoPasswordCopied": "סיסמת הסודו הועתקה ללוח",
|
||
"noPasswordAvailable": "אין סיסמה זמינה"
|
||
},
|
||
"admin": {
|
||
"title": "הגדרות מנהל מערכת",
|
||
"oidc": "OIDC",
|
||
"users": "משתמשים",
|
||
"userManagement": "ניהול משתמשים",
|
||
"makeAdmin": "הפוך למנהל",
|
||
"removeAdmin": "הסר את המנהל",
|
||
"deleteUser": "למחוק את המשתמש {{username}}? לא ניתן לבטל פעולה זו.",
|
||
"allowRegistration": "אפשר רישום",
|
||
"oidcSettings": "הגדרות OIDC",
|
||
"clientId": "מזהה לקוח",
|
||
"clientSecret": "סוד הלקוח",
|
||
"issuerUrl": "כתובת URL של המנפיק",
|
||
"authorizationUrl": "כתובת אתר להרשאה",
|
||
"tokenUrl": "כתובת אתר של אסימון",
|
||
"updateSettings": "עדכון הגדרות",
|
||
"confirmDelete": "האם אתה בטוח שאתה רוצה למחוק את המשתמש הזה?",
|
||
"confirmMakeAdmin": "האם אתה בטוח שאתה רוצה להפוך את {{username}} למנהל?",
|
||
"confirmRemoveAdmin": "האם אתה בטוח שברצונך להסיר את סטטוס המנהל מ- {{username}}?",
|
||
"externalAuthentication": "אימות חיצוני (OIDC)",
|
||
"configureExternalProvider": "הגדר ספק זהויות חיצוני עבור אימות OIDC/OAuth2.",
|
||
"userIdentifierPath": "נתיב מזהה המשתמש",
|
||
"displayNamePath": "נתיב שם התצוגה",
|
||
"scopes": "טווחים",
|
||
"saving": "חִסָכוֹן...",
|
||
"saveConfiguration": "שמור תצורה",
|
||
"reset": "אִתחוּל",
|
||
"success": "הַצלָחָה",
|
||
"loading": "טְעִינָה...",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"loadingUsers": "טוען משתמשים...",
|
||
"username": "שם משתמש",
|
||
"type": "סוּג",
|
||
"actions": "פעולות",
|
||
"external": "חִיצוֹנִי",
|
||
"local": "מְקוֹמִי",
|
||
"adminManagement": "ניהול אדמיניסטרטיבי",
|
||
"makeUserAdmin": "הפוך את המשתמש למנהל",
|
||
"adding": "מוֹסִיף...",
|
||
"currentAdmins": "מנהלים נוכחיים",
|
||
"adminBadge": "מנהל",
|
||
"removeAdminButton": "הסר את המנהל",
|
||
"general": "כְּלָלִי",
|
||
"userRegistration": "רישום משתמש",
|
||
"allowNewAccountRegistration": "אפשר רישום חשבון חדש",
|
||
"allowPasswordLogin": "אפשר כניסה באמצעות שם משתמש/סיסמה",
|
||
"allowPasswordReset": "אפשר איפוס סיסמה באמצעות קוד איפוס",
|
||
"missingRequiredFields": "שדות חובה חסרים: {{fields}}",
|
||
"oidcConfigurationUpdated": "תצורת ה-OIDC עודכנה בהצלחה!",
|
||
"failedToFetchOidcConfig": "נכשלה אחזור תצורת OIDC",
|
||
"failedToFetchRegistrationStatus": "נכשל באחזור סטטוס הרישום",
|
||
"failedToFetchPasswordLoginStatus": "נכשל באחזור סטטוס הכניסה באמצעות סיסמה",
|
||
"failedToFetchUsers": "אחזור המשתמשים נכשל",
|
||
"oidcConfigurationDisabled": "תצורת OIDC הושבתה בהצלחה!",
|
||
"failedToUpdateOidcConfig": "נכשל עדכון תצורת OIDC",
|
||
"failedToDisableOidcConfig": "נכשל בהשבתת תצורת OIDC",
|
||
"enterUsernameToMakeAdmin": "הזן שם משתמש כדי להפוך למנהל",
|
||
"userIsNowAdmin": "משתמש {{username}} הוא כעת מנהל",
|
||
"failedToMakeUserAdmin": "נכשל בהפיכת המשתמש למנהל",
|
||
"removeAdminStatus": "להסיר סטטוס מנהל מ- {{username}}?",
|
||
"adminStatusRemoved": "סטטוס מנהל הוסר מ- {{username}}",
|
||
"failedToRemoveAdminStatus": "הסרת סטטוס מנהל נכשלה",
|
||
"userDeletedSuccessfully": "משתמש {{username}} נמחק בהצלחה",
|
||
"failedToDeleteUser": "מחיקת המשתמש נכשלה",
|
||
"overrideUserInfoUrl": "עקיפת כתובת URL של פרטי משתמש (לא נדרש)",
|
||
"failedToFetchSessions": "נכשלה אחזור הסשנים",
|
||
"sessionRevokedSuccessfully": "ההפעלה בוטלה בהצלחה",
|
||
"failedToRevokeSession": "ביטול ההפעלה נכשל",
|
||
"confirmRevokeSession": "האם אתה בטוח שברצונך לבטל את הסשן הזה?",
|
||
"confirmRevokeAllSessions": "האם אתה בטוח שברצונך לבטל את כל ההפעלות עבור משתמש זה?",
|
||
"failedToRevokeSessions": "ביטול הפעלות נכשל",
|
||
"sessionsRevokedSuccessfully": "הפעילויות בוטלו בהצלחה",
|
||
"linkToPasswordAccount": "קישור לחשבון סיסמה",
|
||
"linkOIDCDialogTitle": "קישור חשבון OIDC לחשבון סיסמה",
|
||
"linkOIDCDialogDescription": "קשר {{username}} (משתמש OIDC) לחשבון סיסמה קיים. פעולה זו תאפשר אימות כפול עבור חשבון הסיסמה.",
|
||
"createUser": "צור משתמש",
|
||
"createUserDescription": "צור משתמש מקומי חדש עם שם משתמש וסיסמה",
|
||
"enterUsername": "הזן שם משתמש",
|
||
"enterPassword": "הזן סיסמה",
|
||
"userCreatedSuccessfully": "משתמש {{username}} נוצר בהצלחה",
|
||
"failedToCreateUser": "יצירת המשתמש נכשלה",
|
||
"manageUser": "ניהול משתמש",
|
||
"manageUserDescription": "ניהול הגדרות משתמש, תפקידים והרשאות",
|
||
"authType": "סוג אימות",
|
||
"adminStatus": "סטטוס מנהל",
|
||
"userId": "מזהה משתמש",
|
||
"regularUser": "משתמש רגיל",
|
||
"adminPrivileges": "הרשאות מנהל",
|
||
"administratorRole": "תפקיד מנהל",
|
||
"administratorRoleDescription": "הענקת גישה מלאה למערכת והרשאות ניהול",
|
||
"passwordManagement": "ניהול סיסמאות",
|
||
"passwordResetWarning": "איפוס סיסמת משתמש ימחק את כל הנתונים שלו (מארחי SSH, פרטי כניסה, הגדרות). פעולה זו אינה ניתנת לביטול.",
|
||
"resetUserPassword": "איפוס סיסמת משתמש",
|
||
"resettingPassword": "איפוס...",
|
||
"passwordResetInitiated": "איפוס סיסמה החל עבור {{username}}. קוד איפוס נשלח.",
|
||
"failedToResetPassword": "נכשלה הפעלת איפוס הסיסמה",
|
||
"sessionManagement": "ניהול סשנים",
|
||
"revokeAllSessions": "ביטול כל ההפעלות",
|
||
"revokeAllSessionsDescription": "כפיית יציאה מכל המכשירים וההפעלות",
|
||
"revoking": "מבטל...",
|
||
"revoke": "בטל הכל",
|
||
"dangerZone": "אזור סכנה",
|
||
"deleteUserTitle": "מחיקת חשבון משתמש",
|
||
"deleteUserWarning": "מחק לצמיתות חשבון משתמש זה וכל הנתונים המשויכים אליו. פעולה זו אינה ניתנת לביטול.",
|
||
"deleting": "מוחק...",
|
||
"cannotDeleteSelf": "אינך יכול למחוק את החשבון שלך בעצמך",
|
||
"cannotRemoveLastAdmin": "לא ניתן להסיר את המנהל האחרון",
|
||
"cannotRemoveOwnAdmin": "אינך יכול להסיר את הרשאות המנהל שלך",
|
||
"cannotModifyOwnAdminStatus": "אינך יכול לשנות את סטטוס המנהל שלך",
|
||
"dualAuth": "אימות כפול",
|
||
"externalOIDC": "חיצוני (OIDC)",
|
||
"localPassword": "סיסמה מקומית",
|
||
"confirmRevokeOwnSessions": "האם אתה בטוח שברצונך לבטל את כל ההפעלות שלך? תתנתק.",
|
||
"linkOIDCWarningTitle": "אזהרה: נתוני משתמש OIDC יימחקו",
|
||
"linkOIDCActionDeleteUser": "מחיקת חשבון המשתמש של OIDC וכל הנתונים שלו",
|
||
"linkOIDCActionAddCapability": "הוסף יכולת התחברות OIDC לחשבון הסיסמה היעד",
|
||
"linkOIDCActionDualAuth": "אפשר לחשבון הסיסמה להתחבר גם עם הסיסמה וגם עם ה-OIDC",
|
||
"linkTargetUsernameLabel": "שם משתמש של חשבון סיסמת יעד",
|
||
"linkTargetUsernamePlaceholder": "הזן שם משתמש של סיסמת חשבון",
|
||
"linkAccountsButton": "קישור חשבונות",
|
||
"linkingAccounts": "מְקַשֵׁר...",
|
||
"accountsLinkedSuccessfully": "משתמש OIDC {{oidcUsername}} קושר ל- {{targetUsername}}",
|
||
"failedToLinkAccounts": "קישור החשבונות נכשל",
|
||
"linkTargetUsernameRequired": "נדרש שם משתמש של היעד",
|
||
"unlinkOIDCTitle": "ניתוק קישור אימות OIDC",
|
||
"unlinkOIDCDescription": "להסיר אימות OIDC מ- {{username}}? המשתמש יוכל להתחבר רק באמצעות שם משתמש/סיסמה לאחר מכן.",
|
||
"unlinkOIDCSuccess": "OIDC נותק מ- {{username}}",
|
||
"failedToUnlinkOIDC": "נכשל ניתוק ה-OIDC",
|
||
"databaseSecurity": "אבטחת מסד נתונים",
|
||
"encryptionStatus": "סטטוס הצפנה",
|
||
"encryptionEnabled": "הצפנה מופעלת",
|
||
"enabled": "מופעל",
|
||
"disabled": "נָכֶה",
|
||
"keyId": "מזהה מפתח",
|
||
"created": "נוצר",
|
||
"migrationStatus": "סטטוס הגירה",
|
||
"migrationCompleted": "ההגירה הושלמה",
|
||
"migrationRequired": "נדרשת הגירה",
|
||
"deviceProtectedMasterKey": "מפתח ראשי מוגן לסביבה",
|
||
"legacyKeyStorage": "אחסון מפתחות מדור קודם",
|
||
"masterKeyEncryptedWithDeviceFingerprint": "מפתח ראשי מוצפן עם טביעת אצבע סביבתית (הגנת KEK פעילה)",
|
||
"keyNotProtectedByDeviceBinding": "המפתח אינו מוגן על ידי קשירת סביבה (מומלץ לשדרג)",
|
||
"valid": "תָקֵף",
|
||
"initializeDatabaseEncryption": "אתחול הצפנת מסד נתונים",
|
||
"enableAes256EncryptionWithDeviceBinding": "הפעל הצפנת AES-256 עם הגנה על מפתחות ראשיים תלוית סביבה. פעולה זו יוצרת אבטחה ברמה ארגונית עבור מפתחות SSH, סיסמאות וטוקני אימות.",
|
||
"featuresEnabled": "תכונות מופעלות:",
|
||
"aes256GcmAuthenticatedEncryption": "הצפנה מאומתת AES-256-GCM",
|
||
"deviceFingerprintMasterKeyProtection": "הגנה סביבתית על מפתח ראשי באמצעות טביעות אצבע (KEK)",
|
||
"pbkdf2KeyDerivation": "גזירת מפתחות PBKDF2 עם 100,000 איטרציות",
|
||
"automaticKeyManagement": "ניהול וסבב מפתחות אוטומטיים",
|
||
"initializing": "מאתחל...",
|
||
"initializeEnterpriseEncryption": "אתחול הצפנה ארגונית",
|
||
"migrateExistingData": "העברת נתונים קיימים",
|
||
"encryptExistingUnprotectedData": "הצפנ נתונים קיימים שאינם מוגנים במסד הנתונים שלך. תהליך זה בטוח ויוצר גיבויים אוטומטיים.",
|
||
"testMigrationDryRun": "אימות תאימות הצפנה",
|
||
"migrating": "מעביר...",
|
||
"migrateData": "העברת נתונים",
|
||
"securityInformation": "מידע אבטחה",
|
||
"sshPrivateKeysEncryptedWithAes256": "מפתחות פרטיים וסיסמאות SSH מוצפנים באמצעות AES-256-GCM",
|
||
"userAuthTokensProtected": "אסימוני אימות משתמשים וסודות 2FA מוגנים",
|
||
"masterKeysProtectedByDeviceFingerprint": "מפתחות הצפנה ראשיים מוגנים על ידי טביעת אצבע של המכשיר (KEK)",
|
||
"keysBoundToServerInstance": "מפתחות קשורים לסביבת השרת הנוכחית (ניתנים להעברה באמצעות משתני סביבה)",
|
||
"pbkdf2HkdfKeyDerivation": "גזירת מפתחות PBKDF2 + HKDF עם 100,000 איטרציות",
|
||
"backwardCompatibleMigration": "כל הנתונים נשארים תואמים לאחור במהלך ההעברה",
|
||
"enterpriseGradeSecurityActive": "אבטחה פעילה ברמה ארגונית",
|
||
"masterKeysProtectedByDeviceBinding": "מפתחות ההצפנה הראשיים שלך מוגנים על ידי טביעות אצבע סביבתיות. פעולה זו משתמשת בשם המארח של השרת, בנתיבים ובמידע סביבתי אחר כדי ליצור מפתחות הגנה. כדי להעביר שרתים, הגדר את משתנה הסביבה DB_ENCRYPTION_KEY בשרת החדש.",
|
||
"important": "חָשׁוּב",
|
||
"keepEncryptionKeysSecure": "ודא אבטחת נתונים: גבה באופן קבוע את קבצי מסד הנתונים ואת תצורת השרת. כדי לעבור לשרת חדש, הגדר את משתנה הסביבה DB_ENCRYPTION_KEY בסביבה החדשה, או שמור על אותו שם מארח ומבנה ספריות.",
|
||
"loadingEncryptionStatus": "טוען סטטוס הצפנה...",
|
||
"testMigrationDescription": "ודא שניתן להעביר נתונים קיימים בבטחה לפורמט מוצפן מבלי לשנות נתונים בפועל",
|
||
"serverMigrationGuide": "מדריך להעברת שרתים",
|
||
"migrationInstructions": "כדי להעביר נתונים מוצפנים לשרת חדש: 1) גבה קבצי מסד נתונים, 2) הגדר את משתנה הסביבה DB_ENCRYPTION_KEY=\"your-key\" בשרת החדש, 3) שחזר קבצי מסד נתונים",
|
||
"environmentProtection": "הגנת הסביבה",
|
||
"environmentProtectionDesc": "מגן על מפתחות הצפנה על סמך מידע על סביבת השרת (שם מארח, נתיבים וכו'), ניתן להעברה באמצעות משתני סביבה",
|
||
"verificationCompleted": "אימות תאימות הושלם - לא שונו נתונים",
|
||
"verificationInProgress": "האימות הושלם",
|
||
"dataMigrationCompleted": "העברת הנתונים הושלמה בהצלחה!",
|
||
"verificationFailed": "אימות התאימות נכשל",
|
||
"migrationFailed": "ההגירה נכשלה",
|
||
"runningVerification": "מפעיל אימות תאימות...",
|
||
"startingMigration": "מתחיל הגירה...",
|
||
"hardwareFingerprintSecurity": "אבטחת טביעות אצבע בחומרה",
|
||
"hardwareBoundEncryption": "הצפנה הקשורה לחומרה פעילה",
|
||
"masterKeysNowProtectedByHardwareFingerprint": "מפתחות ראשיים מוגנים כעת על ידי טביעת אצבעות חומרה אמיתית במקום משתני סביבה",
|
||
"cpuSerialNumberDetection": "זיהוי מספר סידורי של המעבד",
|
||
"motherboardUuidIdentification": "זיהוי UUID של לוח האם",
|
||
"diskSerialNumberVerification": "אימות מספר סידורי של הדיסק",
|
||
"biosSerialNumberCheck": "בדיקת מספר סידורי של ה-BIOS",
|
||
"stableMacAddressFiltering": "סינון כתובות MAC יציב",
|
||
"databaseFileEncryption": "הצפנת קבצי מסד נתונים",
|
||
"dualLayerProtection": "הגנה דו-שכבתית אקטיבית",
|
||
"bothFieldAndFileEncryptionActive": "הצפנה ברמת השדה וברמת הקובץ פעילות כעת לאבטחה מרבית",
|
||
"fieldLevelAes256Encryption": "הצפנת AES-256 ברמת שדה עבור נתונים רגישים",
|
||
"fileLevelDatabaseEncryption": "הצפנת מסד נתונים ברמת הקובץ עם קשירת חומרה",
|
||
"hardwareBoundFileKeys": "מפתחות הצפנת קבצים הקשורים לחומרה",
|
||
"automaticEncryptedBackups": "יצירת גיבוי מוצפן אוטומטית",
|
||
"createEncryptedBackup": "צור גיבוי מוצפן",
|
||
"creatingBackup": "יוצר גיבוי...",
|
||
"backupCreated": "גיבוי נוצר",
|
||
"encryptedBackupCreatedSuccessfully": "גיבוי מוצפן נוצר בהצלחה",
|
||
"backupCreationFailed": "יצירת הגיבוי נכשלה",
|
||
"databaseMigration": "הגירת מסד נתונים",
|
||
"exportForMigration": "ייצוא לצורך הגירה",
|
||
"exportDatabaseForHardwareMigration": "ייצוא מסד נתונים כקובץ SQLite עם נתונים מפוענחים לצורך הגירה לחומרה חדשה",
|
||
"exportDatabase": "ייצוא מסד נתונים של SQLite",
|
||
"exporting": "ייצוא...",
|
||
"exportCreated": "ייצוא SQLite נוצר",
|
||
"exportContainsDecryptedData": "ייצוא SQLite מכיל נתונים מפוענחים - יש לשמור על אבטחה!",
|
||
"databaseExportedSuccessfully": "מסד הנתונים SQLite יוצא בהצלחה",
|
||
"databaseExportFailed": "ייצוא מסד הנתונים של SQLite נכשל",
|
||
"importFromMigration": "ייבוא מהגירה",
|
||
"importDatabaseFromAnotherSystem": "ייבוא מסד נתונים של SQLite ממערכת או חומרה אחרת",
|
||
"importDatabase": "ייבוא מסד נתונים של SQLite",
|
||
"importing": "מייבא...",
|
||
"selectedFile": "קובץ SQLite שנבחר",
|
||
"importWillReplaceExistingData": "ייבוא SQLite יחליף נתונים קיימים - מומלץ גיבוי!",
|
||
"pleaseSelectImportFile": "אנא בחר קובץ ייבוא SQLite",
|
||
"databaseImportedSuccessfully": "מסד הנתונים SQLite יובא בהצלחה",
|
||
"databaseImportFailed": "ייבוא מסד הנתונים של SQLite נכשל",
|
||
"manageEncryptionAndBackups": "ניהול מפתחות הצפנה, אבטחת מסד נתונים ופעולות גיבוי",
|
||
"activeSecurityFeatures": "אמצעי אבטחה והגנות פעילים כעת",
|
||
"deviceBindingTechnology": "טכנולוגיית הגנה מתקדמת על מפתחות מבוססת חומרה",
|
||
"backupAndRecovery": "אפשרויות יצירה מאובטחת של גיבוי ושחזור מסד נתונים",
|
||
"crossSystemDataTransfer": "ייצוא וייבוא של מסדי נתונים בין מערכות שונות",
|
||
"noMigrationNeeded": "אין צורך בהגירה",
|
||
"encryptionKey": "מפתח הצפנה",
|
||
"keyProtection": "הגנה על מפתחות",
|
||
"active": "פָּעִיל",
|
||
"legacy": "מוֹרֶשֶׁת",
|
||
"dataStatus": "סטטוס נתונים",
|
||
"encrypted": "מוצפן",
|
||
"needsMigration": "זקוק להגירה",
|
||
"ready": "מוּכָן",
|
||
"initializeEncryption": "אתחול הצפנה",
|
||
"initialize": "לְאַתחֵל",
|
||
"test": "מִבְחָן",
|
||
"migrate": "לְהַגֵר",
|
||
"backup": "גיבוי",
|
||
"createBackup": "צור גיבוי",
|
||
"exportImport": "ייצוא/ייבוא",
|
||
"export": "יְצוּא",
|
||
"import": "יְבוּא",
|
||
"passwordRequired": "נדרשת סיסמה",
|
||
"confirmExport": "אישור ייצוא",
|
||
"exportDescription": "ייצוא מארחי SSH ופרטי אישורים כקובץ SQLite",
|
||
"importDescription": "ייבוא קובץ SQLite עם מיזוג מצטבר (דילוג על כפילויות)",
|
||
"criticalWarning": "אזהרה קריטית",
|
||
"cannotDisablePasswordLoginWithoutOIDC": "לא ניתן להשבית כניסה באמצעות סיסמה ללא הגדרת OIDC! עליך להגדיר אימות OIDC לפני השבתת כניסה באמצעות סיסמה, אחרת תאבד גישה ל-Termix.",
|
||
"confirmDisablePasswordLogin": "האם אתה בטוח שברצונך להשבית כניסה באמצעות סיסמה? ודא ש-OIDC מוגדר כראוי ופועל לפני שתמשיך, אחרת תאבד גישה למופע Termix שלך.",
|
||
"passwordLoginDisabled": "כניסה עם סיסמה בוטלה בהצלחה",
|
||
"passwordLoginAndRegistrationDisabled": "כניסה עם סיסמה ורישום חשבון חדש הושבתו בהצלחה",
|
||
"requiresPasswordLogin": "דורש כניסה עם סיסמה מופעלת",
|
||
"passwordLoginDisabledWarning": "כניסה באמצעות סיסמה מושבתת. ודא ש-OIDC מוגדר כראוי, אחרת לא תוכל להתחבר ל-Termix.",
|
||
"oidcRequiredWarning": "קריטי: כניסה באמצעות סיסמה מושבתת. אם תאפסו או תגדירו שגוי את ה-OIDC, תאבדו את כל הגישה ל-Termix ותחסמו את המופע שלכם. המשיכו רק אם אתם בטוחים לחלוטין.",
|
||
"confirmDisableOIDCWarning": "אזהרה: אתה עומד להשבית את OIDC כאשר גם כניסה באמצעות סיסמה מושבתת. פעולה זו תגרום לבלום את מופע ה-Termix שלך ותאבד את כל הגישה. האם אתה בטוח לחלוטין שברצונך להמשיך?",
|
||
"failedToUpdatePasswordLoginStatus": "נכשל עדכון סטטוס כניסה באמצעות סיסמה",
|
||
"loadingSessions": "טוען סשנים...",
|
||
"noActiveSessions": "לא נמצאו סשנים פעילים.",
|
||
"device": "הֶתקֵן",
|
||
"user": "מִשׁתַמֵשׁ",
|
||
"lastActive": "פעיל אחרון",
|
||
"expires": "פג תוקף",
|
||
"revoked": "בוטל",
|
||
"revokeAllUserSessionsTitle": "ביטול כל ההפעלות עבור משתמש זה",
|
||
"revokeAll": "בטל הכל",
|
||
"linkOidcToPasswordAccount": "קישור חשבון OIDC לחשבון סיסמה",
|
||
"linkOidcToPasswordAccountDescription": "קשר {{username}} (משתמש OIDC) לחשבון סיסמה קיים. פעולה זו תאפשר אימות כפול עבור חשבון הסיסמה.",
|
||
"linkOidcWarningTitle": "אזהרה: נתוני משתמש OIDC יימחקו",
|
||
"linkOidcWarningDescription": "פעולה זו תביא ל:",
|
||
"linkOidcActionDeleteUser": "מחיקת חשבון המשתמש של OIDC וכל הנתונים שלו",
|
||
"linkOidcActionAddCapability": "הוסף יכולת התחברות OIDC לחשבון הסיסמה היעד",
|
||
"linkOidcActionDualAuth": "אפשר לחשבון הסיסמה להתחבר גם עם הסיסמה וגם עם ה-OIDC",
|
||
"passwordMinLength": "הסיסמה חייבת להיות באורך של לפחות 6 תווים",
|
||
"currentRoles": "תפקידים נוכחיים",
|
||
"noRolesAssigned": "לא הוקצו תפקידים",
|
||
"assignNewRole": "הקצאת תפקיד חדש"
|
||
},
|
||
"hosts": {
|
||
"title": "מנהל מארח",
|
||
"sshHosts": "מארחי SSH",
|
||
"noHosts": "אין מארחי SSH",
|
||
"noHostsMessage": "עדיין לא הוספת מארחי SSH. לחץ על \"הוסף מארח\" כדי להתחיל.",
|
||
"loadingHosts": "טוען מארחים...",
|
||
"failedToLoadHosts": "טעינת המארחים נכשלה",
|
||
"retry": "נסה שוב",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"optional": "אופציונלי",
|
||
"hostsCount": "{{count}} hosts",
|
||
"importJson": "ייבוא JSON",
|
||
"importing": "מייבא...",
|
||
"importJsonTitle": "ייבוא מארחי SSH מ-JSON",
|
||
"importJsonDesc": "העלה קובץ JSON לייבוא בכמות גדולה של מארחי SSH מרובים (מקסימום 100).",
|
||
"downloadSample": "הורד דוגמה",
|
||
"formatGuide": "מדריך פורמט",
|
||
"exportCredentialWarning": "אזהרה: המארח \"{{name}}\" משתמש באימות אישורים. הקובץ המיוצא לא יכלול את נתוני האישורים ויהיה צורך להגדיר אותו מחדש באופן ידני לאחר הייבוא. האם ברצונך להמשיך?",
|
||
"exportSensitiveDataWarning": "אזהרה: המארח \"{{name}}\" מכיל נתוני אימות רגישים (סיסמה/מפתח SSH). הקובץ המיוצא יכלול נתונים אלה בטקסט רגיל. אנא שמור את הקובץ מאובטח ומחק אותו לאחר השימוש. האם ברצונך להמשיך?",
|
||
"uncategorized": "ללא קטגוריה",
|
||
"confirmDelete": "האם אתה בטוח שאתה רוצה למחוק את \"{{name}}\"?",
|
||
"failedToDeleteHost": "מחיקת המארח נכשלה",
|
||
"failedToExportHost": "ייצוא המארח נכשל. אנא ודא שאתה מחובר ויש לך גישה לנתוני המארח.",
|
||
"jsonMustContainHosts": "JSON חייב להכיל מערך \"hosts\" או להיות מערך של hosts",
|
||
"noHostsInJson": "לא נמצאו מארחים בקובץ JSON",
|
||
"maxHostsAllowed": "מקסימום 100 מארחים מותרים לכל ייבוא",
|
||
"importCompleted": "ייבוא הושלם: {{success}} הצליח, {{failed}} נכשל",
|
||
"importFailed": "הייבוא נכשל",
|
||
"importError": "שגיאת ייבוא",
|
||
"failedToImportJson": "ייבוא קובץ JSON נכשל",
|
||
"connectionDetails": "פרטי חיבור",
|
||
"organization": "אִרגוּן",
|
||
"ipAddress": "כתובת IP",
|
||
"port": "נָמָל",
|
||
"name": "שֵׁם",
|
||
"username": "שם משתמש",
|
||
"folder": "תיקייה",
|
||
"tags": "תגיות",
|
||
"pin": "פִּין",
|
||
"notes": "הערות",
|
||
"expirationDate": "תַאֲרִיך תְפוּגָה",
|
||
"passwordRequired": "נדרשת סיסמה בעת שימוש באימות סיסמה",
|
||
"sshKeyRequired": "נדרש מפתח פרטי SSH בעת שימוש באימות מפתח",
|
||
"keyTypeRequired": "נדרש סוג מפתח בעת שימוש באימות מפתח",
|
||
"mustSelectValidSshConfig": "יש לבחור תצורת SSH חוקית מהרשימה",
|
||
"addHost": "הוסף מארח",
|
||
"editHost": "עריכת מארח",
|
||
"cloneHost": "מארח משוכפל",
|
||
"updateHost": "עדכון מארח",
|
||
"hostUpdatedSuccessfully": "המארח \"{{name}}\" עודכן בהצלחה!",
|
||
"hostAddedSuccessfully": "המארח \"{{name}}\" נוסף בהצלחה!",
|
||
"hostDeletedSuccessfully": "המארח \"{{name}}\" נמחק בהצלחה!",
|
||
"failedToSaveHost": "שמירת המארח נכשלה. אנא נסה שוב.",
|
||
"savingHost": "שומר מארח...",
|
||
"updatingHost": "מעדכן מארח...",
|
||
"cloningHost": "משכפל מארח...",
|
||
"enableTerminal": "הפעלת טרמינל",
|
||
"enableTerminalDesc": "הפעלה/השבתה של נראות המארח בכרטיסיית הטרמינל",
|
||
"enableTunnel": "הפעלת מנהרה",
|
||
"enableTunnelDesc": "הפעלה/השבתה של נראות מארח בכרטיסייה 'מנהרה'",
|
||
"enableFileManager": "הפעל את מנהל הקבצים",
|
||
"enableFileManagerDesc": "הפעלה/השבתה של נראות מארח בכרטיסייה מנהל קבצים",
|
||
"enableDockerDesc": "הפעלה/השבתה של נראות מארח בכרטיסיית Docker",
|
||
"enableDocker": "הפעל את Docker",
|
||
"defaultPath": "נתיב ברירת מחדל",
|
||
"defaultPathDesc": "ספריית ברירת מחדל בעת פתיחת מנהל הקבצים עבור מחשב מארח זה",
|
||
"tunnelConnections": "חיבורי מנהרה",
|
||
"connection": "קֶשֶׁר",
|
||
"remove": "לְהַסִיר",
|
||
"sourcePort": "יציאת מקור",
|
||
"sourcePortDesc": " (המקור מתייחס לפרטי החיבור הנוכחיים בלשונית כללי)",
|
||
"endpointPort": "יציאת נקודת קצה",
|
||
"endpointSshConfig": "תצורת SSH של נקודת קצה",
|
||
"tunnelForwardDescription": "מנהרה זו תעביר תעבורה מפורט {{sourcePort}} במחשב המקור (פרטי החיבור הנוכחיים בכרטיסייה הכללית) לפורט {{endpointPort}} במחשב נקודת הקצה.",
|
||
"maxRetries": "מקסימום ניסיונות חוזרים",
|
||
"maxRetriesDescription": "מספר מרבי של ניסיונות חוזרים עבור חיבור מנהרה.",
|
||
"retryInterval": "מרווח זמן לניסיון חוזר (שניות)",
|
||
"retryIntervalDescription": "זמן המתנה בין ניסיונות חוזרים.",
|
||
"autoStartContainer": "הפעלה אוטומטית בעת הפעלת מכולה",
|
||
"autoStartDesc": "הפעל אוטומטית את המנהרה הזו בעת הפעלת המכולה",
|
||
"addConnection": "הוסף חיבור מנהרה",
|
||
"tunnelType": "סוג מנהרה",
|
||
"tunnelTypeLocal": "מקומי (-L)",
|
||
"tunnelTypeRemote": "מרחוק (-R)",
|
||
"tunnelTypeLocalDesc": "העברת פורט מקומי לנקודת קצה מרוחקת",
|
||
"tunnelTypeRemoteDesc": "העברת פורט מרוחק למחשב מקומי",
|
||
"tunnelForwardDescriptionLocal": "מנהרה זו תעביר תעבורה מפורט מקומי {{sourcePort}} לפורט {{endpointPort}} במחשב נקודת הקצה.",
|
||
"tunnelForwardDescriptionRemote": "מנהרה זו תעביר תעבורה מפורט {{sourcePort}} במחשב המקור (פרטי החיבור הנוכחיים בכרטיסייה הכללית) לפורט {{endpointPort}} במחשב נקודת הקצה.",
|
||
"sshpassRequired": "נדרש Sshpass לאימות סיסמה",
|
||
"sshpassRequiredDesc": "לאימות סיסמה במנהרות, יש להתקין sshpass במערכת.",
|
||
"otherInstallMethods": "שיטות התקנה נוספות:",
|
||
"debianUbuntuEquivalent": "(דביאן/אובונטו) או המקבילה למערכת ההפעלה שלך.",
|
||
"or": "אוֹ",
|
||
"centosRhelFedora": "CentOS/RHEL/Fedora",
|
||
"macos": "macOS",
|
||
"windows": "Windows (WSL, ללא קבצי בינארי רשמיים)",
|
||
"sshServerConfigRequired": "נדרשת תצורת שרת SSH",
|
||
"sshServerConfigDesc": "עבור חיבורי מנהרה, יש להגדיר את שרת ה-SSH כך שיאפשר העברת פורטים:",
|
||
"gatewayPortsYes": "כדי לחבר פורטים מרוחקים לכל הממשקים",
|
||
"allowTcpForwardingYes": "כדי לאפשר העברת פורטים",
|
||
"permitRootLoginYes": "אם משתמשים במשתמש root לצורך מנהור",
|
||
"editSshConfig": "ערוך את קובץ התצורה של SSH:",
|
||
"sshConfigPath": "/etc/ssh/sshd_config",
|
||
"restartSshService": "לאחר מכן הפעל מחדש את שירות ה-SSH:",
|
||
"restartSshCommand": "sudo systemctl הפעל מחדש את ה-sshd",
|
||
"upload": "העלאה",
|
||
"authentication": "אימות",
|
||
"password": "סִיסמָה",
|
||
"key": "מַפְתֵחַ",
|
||
"credential": "תְעוּדָה",
|
||
"none": "אַף לֹא אֶחָד",
|
||
"selectCredential": "בחר אישור",
|
||
"selectCredentialPlaceholder": "בחר אישור...",
|
||
"credentialRequired": "נדרשת אישור בעת שימוש באימות אישורים",
|
||
"credentialDescription": "בחירת שם אישור תדרוס את שם המשתמש הנוכחי ותשתמש בפרטי האימות של שם האישור.",
|
||
"cannotChangeAuthAsSharedUser": "לא ניתן לשנות אימות כמשתמש משותף",
|
||
"sshPrivateKey": "מפתח פרטי SSH",
|
||
"keyPassword": "סיסמת מפתח",
|
||
"keyType": "סוג מפתח",
|
||
"autoDetect": "זיהוי אוטומטי",
|
||
"rsa": "RSA",
|
||
"ed25519": "ED25519",
|
||
"ecdsaNistP256": "ECDSA NIST P-256",
|
||
"ecdsaNistP384": "ECDSA NIST P-384",
|
||
"ecdsaNistP521": "ECDSA NIST P-521",
|
||
"dsa": "דירוג רשת (DSA)",
|
||
"rsaSha2256": "RSA SHA2-256",
|
||
"rsaSha2512": "RSA SHA2-512",
|
||
"uploadFile": "העלאת קובץ",
|
||
"pasteKey": "הדבקת מפתח",
|
||
"updateKey": "מפתח עדכון",
|
||
"existingKey": "מפתח קיים (לחץ כדי לשנות)",
|
||
"existingCredential": "אישור קיים (לחץ לשינוי)",
|
||
"addTagsSpaceToAdd": "הוסף תגיות (רווח להוספה)",
|
||
"terminalBadge": "מָסוֹף",
|
||
"tunnelBadge": "מִנהָרָה",
|
||
"fileManagerBadge": "מנהל הקבצים",
|
||
"general": "כְּלָלִי",
|
||
"terminal": "מָסוֹף",
|
||
"tunnel": "מִנהָרָה",
|
||
"fileManager": "מנהל הקבצים",
|
||
"serverStats": "סטטיסטיקות שרת",
|
||
"hostViewer": "צופה מארח",
|
||
"enableServerStats": "הפעל סטטיסטיקות שרת",
|
||
"enableServerStatsDesc": "הפעלה/השבתה של איסוף סטטיסטיקות שרת עבור מארח זה",
|
||
"displayItems": "פריטי תצוגה",
|
||
"displayItemsDesc": "בחר אילו מדדים להציג בדף סטטיסטיקות השרת",
|
||
"enableCpu": "שימוש במעבד",
|
||
"enableMemory": "שימוש בזיכרון",
|
||
"enableDisk": "שימוש בדיסק",
|
||
"enableNetwork": "סטטיסטיקות רשת (בקרוב)",
|
||
"enableProcesses": "ספירת תהליכים (בקרוב)",
|
||
"enableUptime": "זמן פעילות (בקרוב)",
|
||
"enableHostname": "שם מארח (בקרוב)",
|
||
"enableOs": "מערכת הפעלה (בקרוב)",
|
||
"customCommands": "פקודות מותאמות אישית (בקרוב)",
|
||
"customCommandsDesc": "הגדר פקודות כיבוי והפעלה מחדש מותאמות אישית עבור שרת זה",
|
||
"shutdownCommand": "פקודת כיבוי",
|
||
"rebootCommand": "פקודת אתחול מחדש",
|
||
"confirmRemoveFromFolder": "האם אתה בטוח שברצונך להסיר את \"{{name}}\" מהתיקייה \"{{folder}}\"? המארח יועבר ל\"אין תיקייה\".",
|
||
"removedFromFolder": "המארח \"{{name}}\" הוסר בהצלחה מהתיקייה",
|
||
"failedToRemoveFromFolder": "נכשלה הסרת המארח מהתיקייה",
|
||
"folderRenamed": "תיקיית \"{{oldName}}\" שמה שונה בהצלחה ל- \"{{newName}}\"",
|
||
"failedToRenameFolder": "נכשל שינוי שם התיקייה",
|
||
"editFolderAppearance": "עריכת מראה התיקייה",
|
||
"editFolderAppearanceDesc": "התאם אישית את הצבע והסמל עבור התיקייה",
|
||
"folderColor": "צבע התיקייה",
|
||
"folderIcon": "סמל תיקייה",
|
||
"preview": "תצוגה מקדימה",
|
||
"folderAppearanceUpdated": "מראה התיקייה עודכן בהצלחה",
|
||
"failedToUpdateFolderAppearance": "נכשל עדכון מראה התיקייה",
|
||
"deleteAllHostsInFolder": "מחק את כל המארחים בתיקייה",
|
||
"confirmDeleteAllHostsInFolder": "האם אתה בטוח שברצונך למחוק את כל המארחים {{count}} בתיקייה \"{{folder}}\"? לא ניתן לבטל פעולה זו.",
|
||
"allHostsInFolderDeleted": "מחיקת {{count}} hosts מהתיקייה \"{{folder}}\" הצליחה",
|
||
"failedToDeleteHostsInFolder": "נכשלה מחיקת המארחים בתיקייה",
|
||
"movedToFolder": "המארח \"{{name}}\" הועבר ל- \"{{folder}}\" בהצלחה",
|
||
"failedToMoveToFolder": "נכשלה העברת המארח לתיקייה",
|
||
"clickToRenameFolder": "לחץ כדי לשנות את שם התיקייה",
|
||
"renameFolder": "שינוי שם התיקייה",
|
||
"removeFromFolder": "הסר מהתיקייה \"{{folder}}\"",
|
||
"editHostTooltip": "עריכת מארח",
|
||
"deleteHostTooltip": "מחיקת מארח",
|
||
"exportHostTooltip": "ייצוא מארח",
|
||
"cloneHostTooltip": "מארח משוכפל",
|
||
"clickToEditHost": "לחץ כדי לערוך את המארח",
|
||
"dragToMoveBetweenFolders": "גרור כדי לעבור בין תיקיות",
|
||
"exportedHostConfig": "ייצוא תצורת מארח עבור {{name}}",
|
||
"openTerminal": "פתח את הטרמינל",
|
||
"openFileManager": "פתח את מנהל הקבצים",
|
||
"openTunnels": "מנהרות פתוחות",
|
||
"openServerDetails": "פתיחת פרטי שרת",
|
||
"statistics": "סטָטִיסטִיקָה",
|
||
"enabledWidgets": "ווידג'טים מופעלים",
|
||
"openServerStats": "סטטיסטיקות שרת פתוחות",
|
||
"enabledWidgetsDesc": "בחר אילו ווידג'טים של סטטיסטיקות להציג עבור מארח זה",
|
||
"monitoringConfiguration": "תצורת ניטור",
|
||
"monitoringConfigurationDesc": "הגדר את תדירות הבדיקה של סטטיסטיקות וסטטוס השרת",
|
||
"statusCheckEnabled": "הפעל ניטור סטטוס",
|
||
"statusCheckEnabledDesc": "בדוק אם השרת מחובר או לא מחובר",
|
||
"statusCheckInterval": "מרווח זמן לבדיקת סטטוס",
|
||
"statusCheckIntervalDesc": "באיזו תדירות לבדוק אם המארח מחובר (5 שניות - שעה)",
|
||
"metricsEnabled": "הפעל ניטור מדדים",
|
||
"metricsEnabledDesc": "איסוף סטטיסטיקות של מעבד, זיכרון RAM, דיסק ונתונים סטטיסטיים אחרים של המערכת",
|
||
"metricsInterval": "מרווח איסוף מדדים",
|
||
"metricsIntervalDesc": "באיזו תדירות לאסוף סטטיסטיקות שרת (5 שניות - שעה)",
|
||
"intervalSeconds": "שניות",
|
||
"intervalMinutes": "פּרוֹטוֹקוֹל",
|
||
"intervalValidation": "מרווחי הניטור חייבים להיות בין 5 שניות לשעה (3600 שניות)",
|
||
"monitoringDisabled": "ניטור שרת מושבת עבור מארח זה",
|
||
"enableMonitoring": "הפעל ניטור במנהל המארח → לשונית סטטיסטיקה",
|
||
"monitoringDisabledBadge": "ניטור כבוי",
|
||
"statusMonitoring": "סטָטוּס",
|
||
"metricsMonitoring": "מדדים",
|
||
"terminalCustomization": "התאמה אישית של הטרמינל",
|
||
"appearance": "הוֹפָעָה",
|
||
"behavior": "הִתְנַהֲגוּת",
|
||
"advanced": "מִתקַדֵם",
|
||
"themePreview": "תצוגה מקדימה של ערכת נושא",
|
||
"theme": "נוֹשֵׂא",
|
||
"selectTheme": "בחר ערכת נושא",
|
||
"chooseColorTheme": "בחירת ערכת צבעים עבור הטרמינל",
|
||
"fontFamily": "משפחת גופנים",
|
||
"selectFont": "בחירת גופן",
|
||
"selectFontDesc": "בחר את הגופן לשימוש בטרמינל",
|
||
"fontSize": "גודל גופן",
|
||
"fontSizeValue": "גודל גופן: {{value}}פיקסלים",
|
||
"adjustFontSize": "התאם את גודל הגופן של הטרמינל",
|
||
"letterSpacing": "ריווח אותיות",
|
||
"letterSpacingValue": "ריווח בין אותיות: {{value}}פיקסלים",
|
||
"adjustLetterSpacing": "התאמת מרווח בין תווים",
|
||
"lineHeight": "גובה הקו",
|
||
"lineHeightValue": "גובה שורה: {{value}}",
|
||
"adjustLineHeight": "התאמת המרווח בין השורות",
|
||
"cursorStyle": "סגנון הסמן",
|
||
"selectCursorStyle": "בחירת סגנון הסמן",
|
||
"cursorStyleBlock": "לַחסוֹם",
|
||
"cursorStyleUnderline": "לָשִׂים דָגֵשׁ",
|
||
"cursorStyleBar": "בַּר",
|
||
"chooseCursorAppearance": "בחירת מראה הסמן",
|
||
"cursorBlink": "מצמוץ סמן",
|
||
"enableCursorBlink": "הפעל אנימציית הבהוב של הסמן",
|
||
"scrollbackBuffer": "מאגר גלילה לאחור",
|
||
"scrollbackBufferValue": "מאגר גלילה לאחור: {{value}} שורות",
|
||
"scrollbackBufferDesc": "מספר השורות לשמירה בהיסטוריית הגלילה לאחור",
|
||
"bellStyle": "סגנון פעמון",
|
||
"selectBellStyle": "בחר סגנון פעמון",
|
||
"bellStyleNone": "אַף לֹא אֶחָד",
|
||
"bellStyleSound": "קוֹל",
|
||
"bellStyleVisual": "חָזוּתִי",
|
||
"bellStyleBoth": "שְׁנֵיהֶם",
|
||
"bellStyleDesc": "כיצד לטפל בפעמון הטרמינל (תו BEL, \\x07). תוכניות מפעילות זאת בעת השלמת משימות, נתקלות בשגיאות או לקבלת התראות. \"צליל\" משמיע צפצוף קולי, \"חזותי\" מהבהב את המסך לזמן קצר, \"שניהם\" עושה את שניהם, \"ללא\" מבטל התראות פעמון.",
|
||
"rightClickSelectsWord": "לחיצה ימנית בוחרת מילה",
|
||
"rightClickSelectsWordDesc": "לחיצה ימנית בוחרת את המילה שמתחת לסמן",
|
||
"fastScrollModifier": "שינוי גלילה מהירה",
|
||
"selectModifier": "בחירת ערך משנה",
|
||
"modifierAlt": "אלט",
|
||
"modifierCtrl": "קונטרול",
|
||
"modifierShift": "מִשׁמֶרֶת",
|
||
"fastScrollModifierDesc": "מקש שינוי לגלילה מהירה",
|
||
"fastScrollSensitivity": "רגישות גלילה מהירה",
|
||
"fastScrollSensitivityValue": "רגישות גלילה מהירה: {{value}}",
|
||
"fastScrollSensitivityDesc": "מכפיל מהירות גלילה כאשר מקש השינוי נמשך לחוץ",
|
||
"minimumContrastRatio": "יחס ניגודיות מינימלי",
|
||
"minimumContrastRatioValue": "יחס ניגודיות מינימלי: {{value}}",
|
||
"minimumContrastRatioDesc": "התאמת צבעים אוטומטית לקריאה טובה יותר",
|
||
"sshAgentForwarding": "העברת סוכן SSH",
|
||
"sshAgentForwardingDesc": "העברת סוכן אימות SSH למארח מרוחק",
|
||
"backspaceMode": "מצב Backspace",
|
||
"selectBackspaceMode": "בחר מצב Backspace",
|
||
"backspaceModeNormal": "רגיל (DEL)",
|
||
"backspaceModeControlH": "שליטה-H (^H)",
|
||
"backspaceModeDesc": "התנהגות מקש Backspace לצורך תאימות",
|
||
"startupSnippet": "קטע הפעלה",
|
||
"selectSnippet": "בחר קטע",
|
||
"searchSnippets": "חיפוש קטעי טקסט...",
|
||
"snippetNone": "אַף לֹא אֶחָד",
|
||
"noneAuthTitle": "אימות אינטראקטיבי באמצעות מקלדת",
|
||
"noneAuthDescription": "שיטת אימות זו תשתמש באימות אינטראקטיבי באמצעות מקלדת בעת התחברות לשרת SSH.",
|
||
"noneAuthDetails": "אימות אינטראקטיבי באמצעות מקלדת מאפשר לשרת לבקש ממך אישורים במהלך החיבור. זה שימושי עבור שרתים הדורשים אימות רב-גורמי או אם אינך מעוניין לשמור אישורים באופן מקומי.",
|
||
"forceKeyboardInteractive": "כפיית מקלדת אינטראקטיבית",
|
||
"forceKeyboardInteractiveDesc": "כופה שימוש באימות אינטראקטיבי באמצעות מקלדת. זה נדרש לעיתים עבור שרתים המשתמשים באימות דו-שלבי (TOTP/2FA).",
|
||
"overrideCredentialUsername": "עקיפת שם משתמש של פרטי כניסה",
|
||
"overrideCredentialUsernameDesc": "השתמש בשם משתמש שונה מזה המאוחסן באישור. זה מאפשר לך להשתמש באותו אישור עם שמות משתמש שונים.",
|
||
"jumpHosts": "מארחי קפיצה",
|
||
"jumpHostsDescription": "שרתים קפיציים (הידועים גם כשרתים מבוססי בסיס) מאפשרים לך להתחבר לשרת יעד דרך שרת ביניים אחד או יותר. זה שימושי לגישה לשרתים מאחורי חומות אש או ברשתות פרטיות.",
|
||
"jumpHostChain": "שרשרת מארח קפיצה",
|
||
"addJumpHost": "הוסף מארח קפיצה",
|
||
"selectServer": "בחר שרת",
|
||
"searchServers": "חיפוש שרתי...",
|
||
"noServerFound": "לא נמצא שרת",
|
||
"jumpHostsOrder": "החיבורים יתבצעו לפי הסדר: קפיצה למארח 1 → קפיצה למארח 2 → ... → שרת יעד",
|
||
"socks5Proxy": "פרוקסי SOCKS5",
|
||
"socks5Description": "הגדר את פרוקסי SOCKS5 עבור חיבור SSH. כל התעבורה תנותב דרך שרת הפרוקסי שצוין.",
|
||
"enableSocks5": "הפעל את פרוקסי SOCKS5",
|
||
"enableSocks5Description": "השתמש בפרוקסי SOCKS5 עבור חיבור SSH זה",
|
||
"socks5Host": "מארח פרוקסי",
|
||
"socks5Port": "יציאת פרוקסי",
|
||
"socks5Username": "שם משתמש פרוקסי",
|
||
"socks5Password": "סיסמת פרוקסי",
|
||
"socks5UsernameOptional": "אופציונלי: השאר ריק אם פרוקסי אינו דורש אימות",
|
||
"socks5PasswordOptional": "אופציונלי: השאר ריק אם פרוקסי אינו דורש אימות",
|
||
"socks5ProxyChain": "שרשרת פרוקסי",
|
||
"socks5ProxyChainDescription": "הגדר שרשרת של פרוקסי SOCKS. כל פרוקסי בשרשרת יתחבר דרך הקודם.",
|
||
"socks5ProxyMode": "מצב פרוקסי",
|
||
"socks5UseSingleProxy": "השתמש בפרוקסי יחיד",
|
||
"socks5UseProxyChain": "השתמש בשרשרת פרוקסי",
|
||
"socks5UsePreset": "השתמש בהגדרות קבועות מראש ששמרתי",
|
||
"socks5SelectPreset": "בחר הגדרה קבועה מראש",
|
||
"socks5ManagePresets": "ניהול הגדרות קבועות מראש",
|
||
"socks5ProxyNode": "פרוקסי {{number}}",
|
||
"socks5AddProxy": "הוסף פרוקסי לשרשרת",
|
||
"socks5RemoveProxy": "הסר פרוקסי",
|
||
"socks5ProxyType": "סוג פרוקסי",
|
||
"socks5SaveAsPreset": "שמור כהגדרה מראש",
|
||
"socks5SavePresetTitle": "שמור את שרשרת הפרוקסי כהגדרה מראש",
|
||
"socks5SavePresetDescription": "שמור את תצורת שרשרת הפרוקסי הנוכחית כקביעה מוגדרת מראש לשימוש חוזר",
|
||
"socks5PresetName": "שם מוגדר מראש",
|
||
"socks5PresetDescription": "תיאור (אופציונלי)",
|
||
"socks5PresetCreated": "נוצרה הגדרת תצורה מוגדרת מראש של שרשרת פרוקסי",
|
||
"socks5PresetUpdated": "הגדרת שרשרת פרוקסי עודכנה",
|
||
"socks5PresetDeleted": "הגדרת שרשרת פרוקסי נמחקה",
|
||
"socks5PresetSaved": "ההגדרה הקבועה מראש \"{{name}}\" נשמרה בהצלחה",
|
||
"socks5PresetSaveError": "נכשלה שמירת ההגדרה הקבועה מראש",
|
||
"socks5PresetNameRequired": "נדרש שם מוגדר מראש",
|
||
"socks5EmptyChainError": "לא ניתן לשמור שרשרת פרוקסי ריקה",
|
||
"socks5ProxyChainEmpty": "הוסף לפחות פרוקסי אחד לשרשרת",
|
||
"socks5HostDescription": "שם המארח או כתובת ה-IP של שרת הפרוקסי של SOCKS",
|
||
"socks5PortDescription": "מספר פורט של שרת הפרוקסי SOCKS (ברירת מחדל: 1080)",
|
||
"addProxyNode": "הוסף צומת פרוקסי",
|
||
"noProxyNodes": "לא הוגדרו צומתי פרוקסי. לחץ על 'הוסף צומת פרוקסי' כדי להוסיף אחד.",
|
||
"proxyNode": "צומת פרוקסי",
|
||
"proxyType": "סוג פרוקסי",
|
||
"quickActions": "פעולות מהירות",
|
||
"quickActionsDescription": "פעולות מהירות מאפשרות לך ליצור כפתורים מותאמים אישית שמבצעים קטעי SSH בשרת זה. כפתורים אלה יופיעו בראש דף סטטיסטיקות השרת לגישה מהירה.",
|
||
"quickActionsList": "רשימת פעולות מהירות",
|
||
"addQuickAction": "הוסף פעולה מהירה",
|
||
"quickActionName": "שם הפעולה",
|
||
"noSnippetFound": "לא נמצא קטע",
|
||
"quickActionsOrder": "כפתורי פעולה מהירה יופיעו בסדר המפורט למעלה בדף סטטיסטיקות השרת",
|
||
"sidebarCustomization": "התאמה אישית של כפתור סרגל צד",
|
||
"sidebarCustomizationDesc": "בחר אילו פעולות יופיעו ככפתורים מהירים בסרגל הצד. פעולות שלא מוצגות ככפתורים יופיעו בתפריט הנפתח.",
|
||
"showTerminalInSidebar": "הצג את לחצן הטרמינל",
|
||
"showTerminalInSidebarDesc": "הצגת מסוף ככפתור מהיר בסרגל הצד",
|
||
"showFileManagerInSidebar": "הצג את לחצן מנהל הקבצים",
|
||
"showFileManagerInSidebarDesc": "הצג את מנהל הקבצים ככפתור מהיר בסרגל הצד",
|
||
"showTunnelInSidebar": "הצג כפתור מנהרה",
|
||
"showTunnelInSidebarDesc": "הצג את ניהול המנהרות ככפתור מהיר בסרגל הצד",
|
||
"showDockerInSidebar": "הצג את כפתור Docker",
|
||
"showDockerInSidebarDesc": "הצג את ניהול הדוקר ככפתור מהיר בסרגל הצד",
|
||
"showServerStatsInSidebar": "כפתור הצג סטטיסטיקות שרת",
|
||
"showServerStatsInSidebarDesc": "הצגת סטטיסטיקות שרת ככפתור מהיר בסרגל הצד",
|
||
"atLeastOneActionRequired": "לפחות פעולה מופעלת אחת חייבת להיות מוצגת בסרגל הצד",
|
||
"advancedAuthSettings": "הגדרות אימות מתקדמות",
|
||
"sudoPasswordAutoFill": "מילוי אוטומטי של סיסמאות Sudo",
|
||
"sudoPasswordAutoFillDesc": "הצעה אוטומטית להזין סיסמת SSH כאשר sudo מבקש סיסמה",
|
||
"sudoPassword": "סיסמת סודו",
|
||
"sudoPasswordDesc": "סיסמה אופציונלית לפקודות sudo (שימושית עם אימות מפתח)",
|
||
"socks4": "גרביים4",
|
||
"socks5": "גרביים5",
|
||
"executeSnippetOnConnect": "בצע קטע קוד כאשר הטרמינל מתחבר",
|
||
"autoMosh": "אוטו-MOSH",
|
||
"autoMoshDesc": "הפעלת פקודת MOSH באופן אוטומטי בעת חיבור",
|
||
"moshCommand": "פיקוד MOSH",
|
||
"moshCommandDesc": "פקודת MOSH לביצוע",
|
||
"environmentVariables": "משתני סביבה",
|
||
"environmentVariablesDesc": "הגדר משתני סביבה מותאמים אישית עבור סשן הטרמינל",
|
||
"variableName": "שם משתנה",
|
||
"variableValue": "עֵרֶך",
|
||
"addVariable": "הוסף משתנה",
|
||
"docker": "דוקר",
|
||
"openDocker": "פתח את דוקר",
|
||
"copyFullScreenUrl": "העתקת כתובת URL במסך מלא",
|
||
"fullScreenUrlCopied": "כתובת URL במסך מלא הועתקה ללוח",
|
||
"failedToCopyUrl": "נכשלה העתקת כתובת URL ללוח",
|
||
"copyTerminalUrl": "העתקת כתובת URL של הטרמינל",
|
||
"copyFileManagerUrl": "העתקת כתובת URL של מנהל הקבצים",
|
||
"copyTunnelUrl": "העתקת כתובת URL של המנהרה",
|
||
"copyServerStatsUrl": "העתקת כתובת URL של סטטיסטיקות שרת",
|
||
"copyDockerUrl": "העתקת כתובת URL של Docker",
|
||
"fullScreenUrlTooltip": "העתק כתובת URL כדי לפתוח אפליקציה זו במצב מסך מלא",
|
||
"notEnabled": "Docker אינו מופעל עבור מארח זה. הפעל אותו בהגדרות המארח כדי להשתמש בתכונות Docker.",
|
||
"validating": "מאמת את Docker...",
|
||
"error": "שְׁגִיאָה",
|
||
"errorCode": "קוד שגיאה: {{code}}",
|
||
"version": "דוקר נגד{{version}}",
|
||
"current": "נוֹכְחִי",
|
||
"used_limit": "בשימוש / מגבלה",
|
||
"percentage": "אֲחוּזִים",
|
||
"input": "קֶלֶט",
|
||
"output": "תְפוּקָה",
|
||
"read": "לִקְרוֹא",
|
||
"write": "לִכתוֹב",
|
||
"pids": "PIDs",
|
||
"id": "תְעוּדַת זֶהוּת",
|
||
"state": "מְדִינָה",
|
||
"console": "לְנַחֵם",
|
||
"containerMustBeRunning": "המכולה חייבת לפעול כדי להתחבר לקונסולה",
|
||
"authenticationRequired": "נדרש אימות",
|
||
"connectedTo": "מחובר אל {{containerName}}",
|
||
"disconnected": "מְנוּתָק",
|
||
"consoleError": "שגיאת קונסולה",
|
||
"errorMessage": "שגיאה: {{message}}",
|
||
"failedToConnect": "נכשלה ההתחברות לקונסולה",
|
||
"disconnectedFromContainer": "ניתוק מקונסולת המכולה.",
|
||
"containerNotRunning": "המכולה לא פועלת",
|
||
"startContainerToAccess": "הפעל את המכולה כדי לגשת לקונסולה",
|
||
"selectShell": "בחר מעטפת",
|
||
"bash": "לַחֲבוֹט",
|
||
"sh": "ש",
|
||
"ash": "אֵפֶר",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"connect": "לְחַבֵּר",
|
||
"disconnect": "לְנַתֵק",
|
||
"notConnected": "לא מחובר",
|
||
"clickToConnect": "לחץ על התחבר כדי להפעיל מעטפת אינטראקטיבית",
|
||
"connectingTo": "מתחבר אל {{containerName}}...",
|
||
"containerMustBeRunningToViewStats": "יש להפעיל את המיכל כדי להציג נתונים סטטיסטיים",
|
||
"failedToFetchStats": "נכשלה שליפת הנתונים הסטטיסטיים",
|
||
"noContainersFound": "לא נמצאו מכולות",
|
||
"noContainersFoundHint": "התחל על ידי יצירת קונטיינרים בשרת שלך",
|
||
"searchPlaceholder": "חיפוש לפי שם, תמונה או תעודת זהות...",
|
||
"filterByStatusPlaceholder": "סנן לפי סטטוס",
|
||
"allContainersCount": "הכל ({{count}})",
|
||
"statusCount": "{{status}} ({{count}})",
|
||
"noContainersMatchFilters": "אין מכולות התואמות את המסננים שלך",
|
||
"noContainersMatchFiltersHint": "נסה להתאים את החיפוש או הסינון שלך",
|
||
"containerStarted": "מיכל {{name}} הופעל",
|
||
"failedToStartContainer": "נכשל בהפעלת המכולה: {{error}}",
|
||
"containerStopped": "מיכל {{name}} נעצר",
|
||
"failedToStopContainer": "נכשלה עצירת המכולה: {{error}}",
|
||
"containerRestarted": "מיכל {{name}} הופעל מחדש",
|
||
"failedToRestartContainer": "נכשלה ההפעלה מחדש של המכולה: {{error}}",
|
||
"containerUnpaused": "השהיית המיכל {{name}} בוטלה",
|
||
"containerPaused": "מיכל {{name}} הושהה",
|
||
"failedToTogglePauseContainer": "נכשל ביצירת {{action}} של המכולה: {{error}}",
|
||
"containerRemoved": "המיכל {{name}} הוסר",
|
||
"failedToRemoveContainer": "נכשלה הסרת המיכל: {{error}}",
|
||
"image": "תְמוּנָה:",
|
||
"idLabel": "תְעוּדַת זֶהוּת:",
|
||
"ports": "יציאות:",
|
||
"noPorts": "אַף לֹא אֶחָד",
|
||
"created": "נוצר:",
|
||
"start": "הַתחָלָה",
|
||
"stop": "לְהַפְסִיק",
|
||
"unpause": "ביטול השהייה",
|
||
"pause": "הַפסָקָה",
|
||
"restart": "הפעלה מחדש",
|
||
"removeContainer": "הסר את המיכל",
|
||
"confirmRemoveContainer": "האם אתה בטוח שברצונך להסיר את המכולה \"{{name}}\"?",
|
||
"runningContainerWarning": "אזהרה: מיכל זה פועל כעת ויוסר בכוח.",
|
||
"removing": "הסרה:",
|
||
"containerNotFound": "המיכל לא נמצא",
|
||
"backToList": "חזרה לרשימה",
|
||
"logs": "יומני רישום",
|
||
"stats": "סטטיסטיקות",
|
||
"consoleTab": "לְנַחֵם",
|
||
"failedToFetchLogs": "נכשלה אחזור הלוגים: {{error}}",
|
||
"failedToDownloadLogs": "הורדת יומני רישום נכשלה: {{error}}",
|
||
"linesToShow": "קווים להצגה",
|
||
"last50Lines": "50 השורות האחרונות",
|
||
"last100Lines": "100 השורות האחרונות",
|
||
"last500Lines": "500 השורות האחרונות",
|
||
"last1000Lines": "1000 השורות האחרונות",
|
||
"allLogs": "כל היומנים",
|
||
"showTimestamps": "הצג חותמות זמן",
|
||
"autoRefresh": "רענון אוטומטי",
|
||
"filterLogsPlaceholder": "סנן יומני רישום...",
|
||
"noLogsAvailable": "אין יומנים זמינים"
|
||
},
|
||
"terminal": {
|
||
"title": "מָסוֹף",
|
||
"connect": "התחברות למארח",
|
||
"disconnect": "לְנַתֵק",
|
||
"clear": "בָּרוּר",
|
||
"copy": "לְהַעְתִיק",
|
||
"paste": "לְהַדבִּיק",
|
||
"find": "לִמצוֹא",
|
||
"fullscreen": "מסך מלא",
|
||
"splitHorizontal": "פיצול אופקי",
|
||
"splitVertical": "פיצול אנכי",
|
||
"closePanel": "סגור את הפאנל",
|
||
"reconnect": "התחבר מחדש",
|
||
"sessionEnded": "הסשן הסתיים",
|
||
"connectionLost": "החיבור אבד",
|
||
"error": "שגיאה: {{message}}",
|
||
"disconnected": "מְנוּתָק",
|
||
"connectionClosed": "החיבור נסגר",
|
||
"connectionError": "שגיאת חיבור: {{message}}",
|
||
"connected": "מְחוּבָּר",
|
||
"sshConnected": "נוצר חיבור SSH",
|
||
"authError": "האימות נכשל: {{message}}",
|
||
"unknownError": "אירעה שגיאה לא ידועה",
|
||
"messageParseError": "נכשל בניתוח הודעת השרת",
|
||
"websocketError": "שגיאת חיבור WebSocket",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"reconnecting": "מתחבר מחדש... ({{attempt}}/{{max}})",
|
||
"reconnected": "התחבר מחדש בהצלחה",
|
||
"maxReconnectAttemptsReached": "הגעת למספר המקסימלי של ניסיונות חיבור מחדש",
|
||
"connectionTimeout": "זמן קצוב לחיבור",
|
||
"terminalTitle": "טרמינל - {{host}}",
|
||
"terminalWithPath": "טרמינל - {{host}}:{{path}}",
|
||
"runTitle": "ריצה {{command}} - {{host}}",
|
||
"totpRequired": "נדרש אימות דו-שלבי",
|
||
"totpCodeLabel": "קוד אימות",
|
||
"totpPlaceholder": "000000",
|
||
"totpVerify": "לְאַמֵת",
|
||
"warpgateAuthRequired": "נדרש אימות Warpgate",
|
||
"warpgateSecurityKey": "מפתח אבטחה",
|
||
"warpgateAuthUrl": "כתובת URL לאימות",
|
||
"warpgateOpenBrowser": "פתח בדפדפן",
|
||
"warpgateContinue": "סיימתי את האימות",
|
||
"warpgateTimeout": "פסק זמן לאימות Warpgate. אנא התחבר מחדש.",
|
||
"sudoPasswordPopupTitle": "להכניס סיסמה?",
|
||
"sudoPasswordPopupHint": "לחץ על Enter כדי להוסיף, Esc כדי לסגור",
|
||
"sudoPasswordPopupConfirm": "לְהַכנִיס",
|
||
"sudoPasswordPopupDismiss": "לְפַטֵר",
|
||
"websocketAbnormalClose": "החיבור נסגר באופן בלתי צפוי. ייתכן שהדבר נובע מבעיית פרוקסי הפוך או מבעיית תצורת SSL. אנא בדוק את יומני השרת.",
|
||
"totpInvalid": "קוד לא תקין. אנא נסה שוב.",
|
||
"authMethodFallback": "אימות {{method}} נכשל. מנסה שיטה חלופית...",
|
||
"authenticationRequired": "נדרש אימות",
|
||
"connectionLogTitle": "יומן חיבור",
|
||
"connectionLogCopy": "העתקת יומנים ללוח",
|
||
"connectionLogClear": "נקה יומנים",
|
||
"connectionLogEmpty": "אין עדיין יומני חיבור",
|
||
"connectionLogConnecting": "מתחבר למארח...",
|
||
"connectionLogCopied": "יומני חיבור הועתקו ללוח",
|
||
"connectionLogCopyFailed": "נכשלה העתקת יומנים ללוח",
|
||
"allAuthMethodsFailed": "כל שיטות האימות נכשלו. אנא בדוק את פרטי הגישה שלך.",
|
||
"methodNotSupported": "השרת אינו תומך באימות {{method}} . שיטות זמינות: {{available}}",
|
||
"retryWithMethod": "נסה שוב עם {{method}}",
|
||
"automaticFallback": "מנסה אוטומטית אימות {{method}} ...",
|
||
"totpTimeout": "פסק זמן לאימות TOTP. אנא התחבר מחדש.",
|
||
"passwordTimeout": "פסק זמן לאימות סיסמה. אנא התחבר מחדש.",
|
||
"connectionRejected": "החיבור נדחה על ידי השרת. אנא בדוק את האימות ותצורת הרשת שלך."
|
||
},
|
||
"fileManager": {
|
||
"title": "מנהל הקבצים",
|
||
"file": "קוֹבֶץ",
|
||
"folder": "תיקייה",
|
||
"connectToSsh": "התחבר ל-SSH כדי להשתמש בפעולות קבצים",
|
||
"uploadFile": "העלאת קובץ",
|
||
"downloadFile": "הורדה",
|
||
"extractArchive": "ארכיון תמצית",
|
||
"extractingArchive": "מחלץ {{name}}...",
|
||
"archiveExtractedSuccessfully": "{{name}} חולץ בהצלחה",
|
||
"extractFailed": "החילוץ נכשל",
|
||
"compressFile": "דחיסת קובץ",
|
||
"compressFiles": "דחיסת קבצים",
|
||
"compressFilesDesc": "דחיסת {{count}} פריטים לתוך ארכיון",
|
||
"archiveName": "שם הארכיון",
|
||
"enterArchiveName": "הזן שם ארכיון...",
|
||
"compressionFormat": "פורמט דחיסה",
|
||
"selectedFiles": "קבצים נבחרים",
|
||
"andMoreFiles": "ועוד {{count}} ...",
|
||
"compress": "לִדחוֹס",
|
||
"compressingFiles": "דחיסת {{count}} פריטים לתוך {{name}}...",
|
||
"filesCompressedSuccessfully": "{{name}} נוצר בהצלחה",
|
||
"compressFailed": "הדחיסה נכשלה",
|
||
"edit": "לַעֲרוֹך",
|
||
"preview": "תצוגה מקדימה",
|
||
"previous": "קוֹדֵם",
|
||
"next": "הַבָּא",
|
||
"pageXOfY": "עמוד {{current}} מתוך {{total}}",
|
||
"zoomOut": "התקרבות",
|
||
"zoomIn": "לְהִתְמַקֵד",
|
||
"newFile": "קובץ חדש",
|
||
"newFolder": "תיקייה חדשה",
|
||
"rename": "שינוי שם",
|
||
"renameItem": "שינוי שם הפריט",
|
||
"deleteItem": "מחיקת פריט",
|
||
"currentPath": "נתיב נוכחי",
|
||
"uploadFileTitle": "העלאת קובץ",
|
||
"maxFileSize": "מקסימום: 1GB (JSON) / 5GB (בינארי) - תמיכה בקבצים גדולים",
|
||
"removeFile": "הסר קובץ",
|
||
"clickToSelectFile": "לחץ כדי לבחור קובץ",
|
||
"chooseFile": "בחר קובץ",
|
||
"uploading": "מעלה...",
|
||
"downloading": "מוריד...",
|
||
"uploadingFile": "מעלה {{name}}...",
|
||
"uploadingLargeFile": "מעלה קובץ גדול {{name}} ({{size}})...",
|
||
"downloadingFile": "מוריד {{name}}...",
|
||
"creatingFile": "יוצר {{name}}...",
|
||
"creatingFolder": "יוצר {{name}}...",
|
||
"deletingItem": "מוחק {{type}} {{name}}...",
|
||
"renamingItem": "שינוי השם של {{type}} {{oldName}} ל- {{newName}}...",
|
||
"createNewFile": "צור קובץ חדש",
|
||
"fileName": "שם הקובץ",
|
||
"creating": "יוצר...",
|
||
"createFile": "צור קובץ",
|
||
"createNewFolder": "צור תיקייה חדשה",
|
||
"folderName": "שם התיקייה",
|
||
"createFolder": "צור תיקייה",
|
||
"warningCannotUndo": "אזהרה: לא ניתן לבטל פעולה זו",
|
||
"itemPath": "נתיב הפריט",
|
||
"thisIsDirectory": "זוהי ספרייה (תמחק באופן רקורסיבי)",
|
||
"deleting": "מוחק...",
|
||
"currentPathLabel": "נתיב נוכחי",
|
||
"newName": "שם חדש",
|
||
"thisIsDirectoryRename": "זוהי ספרייה",
|
||
"renaming": "שינוי שם...",
|
||
"fileUploadedSuccessfully": "הקובץ \"{{name}}\" הועלה בהצלחה",
|
||
"failedToUploadFile": "העלאת הקובץ נכשלה",
|
||
"fileDownloadedSuccessfully": "הקובץ \"{{name}}\" הורד בהצלחה",
|
||
"failedToDownloadFile": "הורדת הקובץ נכשלה",
|
||
"noFileContent": "לא התקבל תוכן קובץ",
|
||
"filePath": "נתיב הקובץ",
|
||
"fileCreatedSuccessfully": "הקובץ \"{{name}}\" נוצר בהצלחה",
|
||
"failedToCreateFile": "יצירת הקובץ נכשלה",
|
||
"folderCreatedSuccessfully": "תיקייה \"{{name}}\" נוצרה בהצלחה",
|
||
"failedToCreateFolder": "יצירת התיקייה נכשלה",
|
||
"failedToCreateItem": "יצירת הפריט נכשלה",
|
||
"operationFailed": "הפעולה {{operation}} נכשלה עבור {{name}}: {{error}}",
|
||
"failedToResolveSymlink": "נכשל בפענוח הקישור הסימלי",
|
||
"itemDeletedSuccessfully": "{{type}} נמחק בהצלחה",
|
||
"itemsDeletedSuccessfully": "{{count}} פריטים נמחקו בהצלחה",
|
||
"failedToDeleteItems": "מחיקת הפריטים נכשלה",
|
||
"sudoPasswordRequired": "נדרשת סיסמת מנהל",
|
||
"enterSudoPassword": "הזן את סיסמת הסודו כדי להמשיך בפעולה זו",
|
||
"sudoPassword": "סיסמת סודו",
|
||
"sudoOperationFailed": "פעולת הסודו נכשלה",
|
||
"sudoAuthFailed": "אימות סודו נכשל",
|
||
"deleteOperation": "מחיקת קבצים/תיקיות",
|
||
"dragFilesToUpload": "שחררו קבצים כאן כדי להעלות",
|
||
"emptyFolder": "תיקייה זו ריקה",
|
||
"itemCount": "פריטים {{count}}",
|
||
"selectedCount": "{{count}} נבחר",
|
||
"searchFiles": "חיפוש קבצים...",
|
||
"upload": "העלאה",
|
||
"selectHostToStart": "בחר מארח כדי להתחיל בניהול קבצים",
|
||
"failedToConnect": "נכשלה ההתחברות ל-SSH",
|
||
"failedToLoadDirectory": "טעינת הספרייה נכשלה",
|
||
"noSSHConnection": "אין חיבור SSH זמין",
|
||
"enterFolderName": "הזן שם תיקייה:",
|
||
"enterFileName": "הזן שם קובץ:",
|
||
"copy": "לְהַעְתִיק",
|
||
"cut": "גְזִירָה",
|
||
"paste": "לְהַדבִּיק",
|
||
"copyPath": "העתק נתיב",
|
||
"copyPaths": "העתקת נתיבים",
|
||
"delete": "לִמְחוֹק",
|
||
"properties": "נכסים",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"downloadFiles": "הורד {{count}} קבצים לדפדפן",
|
||
"copyFiles": "העתקת {{count}} פריטים",
|
||
"cutFiles": "גזור {{count}} פריטים",
|
||
"deleteFiles": "מחיקת {{count}} פריטים",
|
||
"filesCopiedToClipboard": "{{count}} פריטים הועתקו ללוח",
|
||
"filesCutToClipboard": "{{count}} פריטים נחתכו ללוח",
|
||
"pathCopiedToClipboard": "הנתיב הועתק ללוח",
|
||
"pathsCopiedToClipboard": "נתיבים {{count}} הועתקו ללוח",
|
||
"failedToCopyPath": "נכשלה העתקת הנתיב ללוח",
|
||
"movedItems": "הועבר {{count}} פריטים",
|
||
"failedToDeleteItem": "מחיקת הפריט נכשלה",
|
||
"itemRenamedSuccessfully": "שם השינוי של {{type}} הצליח",
|
||
"failedToRenameItem": "שינוי שם הפריט נכשל",
|
||
"download": "הורדה",
|
||
"permissions": "הרשאות",
|
||
"size": "גוֹדֶל",
|
||
"modified": "שונה",
|
||
"path": "נָתִיב",
|
||
"confirmDelete": "האם אתה בטוח שאתה רוצה למחוק {{name}}?",
|
||
"uploadSuccess": "הקובץ הועלה בהצלחה",
|
||
"uploadFailed": "העלאת הקובץ נכשלה",
|
||
"downloadSuccess": "הקובץ הורד בהצלחה",
|
||
"downloadFailed": "הורדת הקובץ נכשלה",
|
||
"permissionDenied": "ההרשאה נדחתה",
|
||
"checkDockerLogs": "בדוק את יומני ה-Docker לקבלת מידע מפורט על שגיאות",
|
||
"internalServerError": "אירעה שגיאת שרת פנימית",
|
||
"serverError": "שגיאת שרת",
|
||
"error": "שְׁגִיאָה",
|
||
"requestFailed": "הבקשה נכשלה עם קוד סטטוס",
|
||
"unknownFileError": "לֹא יְדוּעַ",
|
||
"cannotReadFile": "לא ניתן לקרוא את הקובץ",
|
||
"noSshSessionId": "אין מזהה סשן SSH זמין",
|
||
"noFilePath": "אין נתיב קובץ זמין",
|
||
"noCurrentHost": "אין מארח זמין כרגע",
|
||
"fileSavedSuccessfully": "הקובץ נשמר בהצלחה",
|
||
"saveTimeout": "פעולת השמירה הסתיימה. ייתכן שהקובץ נשמר בהצלחה, אך הפעולה ארכה זמן רב מדי להשלמתה. בדוק את יומני Docker לאישור.",
|
||
"failedToSaveFile": "שמירת הקובץ נכשלה",
|
||
"deletedSuccessfully": "נמחק בהצלחה",
|
||
"connectToServer": "התחברות לשרת",
|
||
"selectServerToEdit": "בחר שרת מסרגל הצד כדי להתחיל לערוך קבצים",
|
||
"fileOperations": "פעולות קבצים",
|
||
"confirmDeleteMessage": "האם אתה בטוח שאתה רוצה למחוק {{name}}?",
|
||
"confirmDeleteSingleItem": "האם אתה בטוח שברצונך למחוק לצמיתות את \"{{name}}\"?",
|
||
"confirmDeleteMultipleItems": "האם אתה בטוח שברצונך למחוק לצמיתות {{count}} פריטים?",
|
||
"confirmDeleteMultipleItemsWithFolders": "האם אתה בטוח שברצונך למחוק לצמיתות את הפריטים {{count}} ? זה כולל תיקיות ותוכן שלהן.",
|
||
"confirmDeleteFolder": "האם אתה בטוח שברצונך למחוק לצמיתות את התיקייה \"{{name}}\" ואת כל תוכנה?",
|
||
"deleteDirectoryWarning": "פעולה זו תמחק את התיקייה וכל תוכנה.",
|
||
"actionCannotBeUndone": "לא ניתן לבטל פעולה זו.",
|
||
"permanentDeleteWarning": "לא ניתן לבטל פעולה זו. הפריט/ים יימחקו לצמיתות מהשרת.",
|
||
"recent": "אחרונים",
|
||
"pinned": "מוצמד",
|
||
"folderShortcuts": "קיצורי דרך לתיקיות",
|
||
"noRecentFiles": "אין קבצים אחרונים.",
|
||
"noPinnedFiles": "אין קבצים מוצמדים.",
|
||
"enterFolderPath": "הזן נתיב לתיקייה",
|
||
"noShortcuts": "אין קיצורי דרך.",
|
||
"searchFilesAndFolders": "חיפוש קבצים ותיקיות...",
|
||
"noFilesOrFoldersFound": "לא נמצאו קבצים או תיקיות.",
|
||
"failedToConnectSSH": "נכשלה ההתחברות ל-SSH",
|
||
"failedToReconnectSSH": "נכשל בחיבור מחדש של סשן SSH",
|
||
"failedToListFiles": "רשימת הקבצים נכשלה",
|
||
"fetchHomeDataTimeout": "תם הזמן שהוקצב לאחזור נתוני הבית",
|
||
"sshStatusCheckTimeout": "בדיקת סטטוס SSH הסתיימה",
|
||
"sshReconnectionTimeout": "פסק הזמן לחיבור מחדש של SSH הסתיים",
|
||
"saveOperationTimeout": "פעולת השמירה הסתיימה",
|
||
"cannotSaveFile": "לא ניתן לשמור את הקובץ",
|
||
"dragSystemFilesToUpload": "גררו קבצי מערכת לכאן כדי להעלות",
|
||
"dragFilesToWindowToDownload": "גררו קבצים מחוץ לחלון כדי להוריד",
|
||
"openTerminalHere": "פתח את הטרמינל כאן",
|
||
"run": "לָרוּץ",
|
||
"saveToSystem": "שמור בשם...",
|
||
"selectLocationToSave": "בחר מיקום לשמירה",
|
||
"openTerminalInFolder": "פתח את הטרמינל בתיקייה זו",
|
||
"openTerminalInFileLocation": "פתיחת מסוף במיקום הקובץ",
|
||
"terminalWithPath": "טרמינל - {{host}}:{{path}}",
|
||
"runningFile": "ריצה - {{file}}",
|
||
"onlyRunExecutableFiles": "יכול להריץ רק קבצי הפעלה",
|
||
"noHostSelected": "לא נבחר מארח",
|
||
"starred": "מסומן בכוכב",
|
||
"shortcuts": "קיצורי דרך",
|
||
"directories": "מדריכים",
|
||
"removedFromRecentFiles": "הוסר \"{{name}}\" מהקבצים האחרונים",
|
||
"removeFailed": "ההסרה נכשלה",
|
||
"unpinnedSuccessfully": "ביטול ההצמדה של \"{{name}}\" בוטל בהצלחה",
|
||
"unpinFailed": "ביטול ההצמדה נכשל",
|
||
"removedShortcut": "קיצור הדרך \"{{name}}\" הוסר",
|
||
"removeShortcutFailed": "הסרת קיצור הדרך נכשלה",
|
||
"clearedAllRecentFiles": "ניקה את כל הקבצים האחרונים",
|
||
"clearFailed": "ניקוי נכשל",
|
||
"removeFromRecentFiles": "הסר מהקבצים האחרונים",
|
||
"clearAllRecentFiles": "נקה את כל הקבצים האחרונים",
|
||
"unpinFile": "ביטול הצמדת קובץ",
|
||
"removeShortcut": "הסר קיצור דרך",
|
||
"saveFilesToSystem": "שמור {{count}} קבצים בתור...",
|
||
"pinFile": "קובץ הצמדה",
|
||
"addToShortcuts": "הוסף לקיצורי דרך",
|
||
"downloadToDefaultLocation": "הורדה למיקום ברירת המחדל",
|
||
"pasteFailed": "ההדבקה נכשלה",
|
||
"noUndoableActions": "אין פעולות שניתן לבטל",
|
||
"undoCopySuccess": "פעולת העתקה שבוטלה: מחיקת {{count}} קבצים שהועתקו",
|
||
"undoCopyFailedDelete": "ביטול נכשל: לא ניתן היה למחוק קבצים שהועתקו",
|
||
"undoCopyFailedNoInfo": "ביטול נכשל: לא ניתן היה למצוא את פרטי הקובץ שהועתק",
|
||
"undoMoveSuccess": "פעולת העברה שבוטלה: העבירו {{count}} קבצים חזרה למיקום המקורי",
|
||
"undoMoveFailedMove": "ביטול נכשל: לא ניתן היה להעביר קבצים בחזרה",
|
||
"undoMoveFailedNoInfo": "ביטול נכשל: לא ניתן היה למצוא מידע על הקובץ שהועבר",
|
||
"undoDeleteNotSupported": "לא ניתן לבטל את פעולת המחיקה: הקבצים נמחקו לצמיתות מהשרת",
|
||
"undoTypeNotSupported": "סוג פעולת ביטול לא נתמך",
|
||
"undoOperationFailed": "פעולת הביטול נכשלה",
|
||
"unknownError": "שגיאה לא ידועה",
|
||
"enterPath": "הזן נתיב...",
|
||
"editPath": "עריכת נתיב",
|
||
"confirm": "לְאַשֵׁר",
|
||
"cancel": "לְבַטֵל",
|
||
"find": "לִמצוֹא...",
|
||
"replaceWith": "החלף עם...",
|
||
"replace": "לְהַחלִיף",
|
||
"replaceAll": "החלף הכל",
|
||
"downloadInstead": "הורד במקום זאת",
|
||
"keyboardShortcuts": "קיצורי מקלדת",
|
||
"searchAndReplace": "חיפוש והחלפה",
|
||
"editing": "עֲרִיכָה",
|
||
"navigation": "ניווט",
|
||
"code": "קוד",
|
||
"search": "לְחַפֵּשׂ",
|
||
"findNext": "מצא את הבא",
|
||
"findPrevious": "מצא את הקודם",
|
||
"save": "לְהַצִיל",
|
||
"selectAll": "בחר הכל",
|
||
"undo": "לְבַטֵל",
|
||
"redo": "לַעֲשׂוֹת שׁוּב",
|
||
"goToLine": "עבור אל שורה",
|
||
"moveLineUp": "הזזת שורה למעלה",
|
||
"moveLineDown": "הזזת שורה למטה",
|
||
"toggleComment": "החלף/הפעל תגובה",
|
||
"indent": "לְשַׁנֵן",
|
||
"outdent": "הזחה החוצה",
|
||
"autoComplete": "השלמה אוטומטית",
|
||
"imageLoadError": "טעינת התמונה נכשלה",
|
||
"rotate": "לְסוֹבֵב",
|
||
"originalSize": "גודל מקורי",
|
||
"startTyping": "התחל להקליד...",
|
||
"unknownSize": "גודל לא ידוע",
|
||
"fileIsEmpty": "הקובץ ריק",
|
||
"largeFileWarning": "אזהרת קובץ גדול",
|
||
"largeFileWarningDesc": "קובץ זה הוא בגודל {{size}} , דבר שעלול לגרום לבעיות ביצועים בעת פתיחתו כטקסט.",
|
||
"fileNotFoundAndRemoved": "הקובץ \"{{name}}\" לא נמצא והוסר מהקבצים האחרונים/המוצמדים",
|
||
"failedToLoadFile": "טעינת הקובץ נכשלה: {{error}}",
|
||
"serverErrorOccurred": "אירעה שגיאת שרת. אנא נסה שוב מאוחר יותר.",
|
||
"autoSaveFailed": "השמירה האוטומטית נכשלה",
|
||
"fileAutoSaved": "קובץ נשמר אוטומטית",
|
||
"moveFileFailed": "נכשל בהזזת {{name}}",
|
||
"moveOperationFailed": "פעולת ההעברה נכשלה",
|
||
"canOnlyCompareFiles": "ניתן להשוות רק שני קבצים",
|
||
"comparingFiles": "השוואת קבצים: {{file1}} ו- {{file2}}",
|
||
"dragFailed": "פעולת הגרירה נכשלה",
|
||
"filePinnedSuccessfully": "הקובץ \"{{name}}\" הוצמד בהצלחה",
|
||
"pinFileFailed": "נכשל בהצמדת הקובץ",
|
||
"fileUnpinnedSuccessfully": "הקובץ \"{{name}}\" נותק בהצלחה",
|
||
"unpinFileFailed": "נכשל ניתוק הקובץ",
|
||
"shortcutAddedSuccessfully": "קיצור דרך לתיקייה \"{{name}}\" נוסף בהצלחה",
|
||
"addShortcutFailed": "הוספת קיצור דרך נכשלה",
|
||
"operationCompletedSuccessfully": "{{operation}} {{count}} פריטים הצליחו",
|
||
"operationCompleted": "{{operation}} {{count}} פריטים",
|
||
"downloadFileSuccess": "הקובץ {{name}} הורד בהצלחה",
|
||
"downloadFileFailed": "ההורדה נכשלה",
|
||
"moveTo": "מעבר אל {{name}}",
|
||
"diffCompareWith": "השוואת הבדלים עם {{name}}",
|
||
"dragOutsideToDownload": "גרור את הקבצים אל מחוץ לחלון כדי להוריד אותם ({{count}} )",
|
||
"newFolderDefault": "תיקייה חדשה",
|
||
"newFileDefault": "קובץ חדש.txt",
|
||
"successfullyMovedItems": "הועבר בהצלחה {{count}} פריטים אל {{target}}",
|
||
"move": "מַהֲלָך",
|
||
"searchInFile": "חיפוש בקובץ (Ctrl+F)",
|
||
"showKeyboardShortcuts": "הצג קיצורי מקלדת",
|
||
"startWritingMarkdown": "התחל לכתוב את תוכן ההנחה שלך...",
|
||
"loadingFileComparison": "טוען השוואת קבצים...",
|
||
"reload": "לִטעוֹן מִחָדָשׁ",
|
||
"compare": "לְהַשְׁווֹת",
|
||
"sideBySide": "זֶה בְּצַד זֶה",
|
||
"inline": "מוטבע",
|
||
"fileComparison": "השוואת קבצים: {{file1}} לעומת {{file2}}",
|
||
"fileTooLarge": "קובץ גדול מדי: {{error}}",
|
||
"sshConnectionFailed": "חיבור SSH נכשל. אנא בדוק את החיבור שלך אל {{name}} ({{ip}}:{{port}})",
|
||
"loadFileFailed": "טעינת הקובץ נכשלה: {{error}}",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"connectedSuccessfully": "התחבר בהצלחה",
|
||
"totpVerificationFailed": "אימות TOTP נכשל",
|
||
"warpgateVerificationFailed": "אימות Warpgate נכשל",
|
||
"authenticationFailed": "האימות נכשל",
|
||
"verificationCodePrompt": "קוד אימות:",
|
||
"changePermissions": "שינוי הרשאות",
|
||
"changePermissionsDesc": "שינוי הרשאות קבצים עבור",
|
||
"currentPermissions": "הרשאות נוכחיות",
|
||
"newPermissions": "הרשאות חדשות",
|
||
"owner": "בַּעַל",
|
||
"group": "קְבוּצָה",
|
||
"others": "אחרים",
|
||
"read": "לִקְרוֹא",
|
||
"write": "לִכתוֹב",
|
||
"execute": "לְבַצֵעַ",
|
||
"permissionsChangedSuccessfully": "ההרשאות שונו בהצלחה",
|
||
"failedToChangePermissions": "שינוי ההרשאות נכשל"
|
||
},
|
||
"tunnel": {
|
||
"log": {
|
||
"connecting": "יצירת חיבור למנהרה...",
|
||
"sourceConnecting": "מתחבר למארח המקור {{host}}...",
|
||
"sourceConnected": "מחובר למארח המקור",
|
||
"endpointResolving": "פתרון מארח נקודת קצה {{host}}...",
|
||
"endpointResolved": "מארח נקודת הקצה נפתר",
|
||
"forwarding": "הגדרת העברת פורטים {{localPort}} → {{remotePort}}...",
|
||
"connected": "המנהרה הוקמה בהצלחה",
|
||
"retrying": "החיבור נכשל, ניסיון חוזר בעוד {{countdown}}שניות (ניסיון {{attempt}}/{{max}})...",
|
||
"retryExhausted": "הגעת למספר מקסימלי של ניסיונות ניסיון חוזר",
|
||
"error": "חיבור המנהרה נכשל: {{error}}"
|
||
}
|
||
},
|
||
"tunnels": {
|
||
"title": "מנהרות SSH",
|
||
"noSshTunnels": "אין מנהרות SSH",
|
||
"createFirstTunnelMessage": "עדיין לא יצרת מנהרות SSH. הגדר חיבורי מנהרות במנהל המארח כדי להתחיל.",
|
||
"connected": "מְחוּבָּר",
|
||
"disconnected": "מְנוּתָק",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"disconnecting": "מתנתק...",
|
||
"unknownTunnelStatus": "לֹא יְדוּעַ",
|
||
"statusUnknown": "לֹא יְדוּעַ",
|
||
"unknown": "לֹא יְדוּעַ",
|
||
"error": "שְׁגִיאָה",
|
||
"failed": "נִכשָׁל",
|
||
"retrying": "מנסה שוב",
|
||
"waiting": "הַמתָנָה",
|
||
"waitingForRetry": "ממתין לניסיון חוזר",
|
||
"retryingConnection": "מנסה להתחבר שוב",
|
||
"canceling": "מבטל...",
|
||
"connect": "לְחַבֵּר",
|
||
"disconnect": "לְנַתֵק",
|
||
"cancel": "לְבַטֵל",
|
||
"port": "נָמָל",
|
||
"attempt": "ניסיון {{current}} מתוך {{max}}",
|
||
"nextRetryIn": "ניסיון חוזר הבא בעוד {{seconds}} שניות",
|
||
"checkDockerLogs": "בדוק את יומני ה-Docker שלך כדי למצוא את סיבת השגיאה, הצטרף ל-",
|
||
"orCreate": "או ליצור ",
|
||
"noTunnelConnections": "לא הוגדרו חיבורי מנהרה",
|
||
"tunnelConnections": "חיבורי מנהרה",
|
||
"addTunnel": "הוסף מנהרה",
|
||
"editTunnel": "עריכת מנהרה",
|
||
"deleteTunnel": "מחיקת מנהרה",
|
||
"tunnelName": "שם המנהרה",
|
||
"localPort": "נמל מקומי",
|
||
"remoteHost": "מארח מרוחק",
|
||
"remotePort": "יציאה מרוחקת",
|
||
"autoStart": "הפעלה אוטומטית",
|
||
"status": "סטָטוּס",
|
||
"active": "פָּעִיל",
|
||
"inactive": "לֹא פָּעִיל",
|
||
"start": "הַתחָלָה",
|
||
"stop": "לְהַפְסִיק",
|
||
"restart": "הפעלה מחדש",
|
||
"connectionType": "סוג חיבור",
|
||
"local": "מְקוֹמִי",
|
||
"remote": "מְרוּחָק",
|
||
"dynamic": "דִינָמִי",
|
||
"unknownConnectionStatus": "לֹא יְדוּעַ",
|
||
"portMapping": "פורט {{sourcePort}} → {{endpointHost}}:{{endpointPort}}",
|
||
"endpointHostNotFound": "מארח נקודת הקצה לא נמצא",
|
||
"discord": "מַחֲלוֹקֶת",
|
||
"githubIssue": "בעיית GitHub",
|
||
"forHelp": "לעזרה"
|
||
},
|
||
"serverStats": {
|
||
"title": "סטטיסטיקות שרת",
|
||
"cpu": "מעבד",
|
||
"memory": "זֵכֶר",
|
||
"disk": "דִיסק",
|
||
"network": "רֶשֶׁת",
|
||
"uptime": "זמן פעולה",
|
||
"loadAverage": "ממוצע: {{avg1}}, {{avg5}}, {{avg15}}",
|
||
"processes": "תהליכים",
|
||
"connections": "חיבורים",
|
||
"usage": "נוֹהָג",
|
||
"available": "זָמִין",
|
||
"total": "סַך הַכֹּל",
|
||
"free": "לְשַׁחְרֵר",
|
||
"used": "מְשׁוּמָשׁ",
|
||
"percentage": "אֲחוּזִים",
|
||
"refreshStatusAndMetrics": "רענון סטטוס ומדדים",
|
||
"refreshStatus": "רענון סטטוס",
|
||
"fileManagerAlreadyOpen": "מנהל הקבצים כבר פתוח עבור מארח זה",
|
||
"openFileManager": "פתח את מנהל הקבצים",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"connectionFailed": "נכשלה ההתחברות לשרת",
|
||
"cpuCores_one": "מעבד {{count}}",
|
||
"cpuCores_other": "מעבדים {{count}}",
|
||
"naCpus": "מעבדים לא רלוונטיים",
|
||
"loadAverageNA": "ממוצע: לא רלוונטי",
|
||
"cpuUsage": "שימוש במעבד",
|
||
"memoryUsage": "שימוש בזיכרון",
|
||
"diskUsage": "שימוש בדיסק",
|
||
"rootStorageSpace": "שטח אחסון שורש",
|
||
"of": "שֶׁל",
|
||
"feedbackMessage": "יש לכם רעיונות לגבי מה שצריך לבוא בהמשך בניהול שרתים? שתפו אותם ב",
|
||
"failedToFetchHostConfig": "נכשל באחזור תצורת המארח",
|
||
"failedToFetchStatus": "נכשל באחזור סטטוס השרת",
|
||
"failedToFetchMetrics": "נכשל באחזור מדדי השרת",
|
||
"failedToFetchHomeData": "נכשל באחזור נתוני הבית",
|
||
"loadingMetrics": "טוען מדדים...",
|
||
"refreshing": "מְרַעֲנֵן...",
|
||
"serverOffline": "שרת לא מקוון",
|
||
"cannotFetchMetrics": "לא ניתן לאחזר מדדים משרת לא מקוון",
|
||
"totpRequired": "נדרש אימות TOTP",
|
||
"totpUnavailable": "סטטיסטיקות שרת אינן זמינות עבור שרתים התומכים ב-TOTP",
|
||
"totpVerified": "TOTP אומת, איסוף מדדים החל",
|
||
"totpFailed": "אימות TOTP נכשל",
|
||
"totpInvalidCode": "קוד אימות לא תקין",
|
||
"totpCancelled": "איסוף המדדים בוטל",
|
||
"authenticationFailed": "האימות נכשל",
|
||
"noneAuthNotSupported": "סטטיסטיקות השרת אינן תומכות בסוג אימות 'ללא'.",
|
||
"load": "לִטעוֹן",
|
||
"editLayout": "עריכת פריסה",
|
||
"cancelEdit": "לְבַטֵל",
|
||
"addWidget": "הוסף ווידג'ט",
|
||
"saveLayout": "שמור פריסה",
|
||
"unsavedChanges": "שינויים שלא נשמרו",
|
||
"layoutSaved": "הפריסה נשמרה בהצלחה",
|
||
"failedToSaveLayout": "שמירת הפריסה נכשלה",
|
||
"systemInfo": "מידע מערכת",
|
||
"hostname": "שם מארח",
|
||
"operatingSystem": "מַעֲרֶכֶת הַפעָלָה",
|
||
"kernel": "גַרעִין",
|
||
"totalUptime": "זמן פעולה כולל",
|
||
"seconds": "שניות",
|
||
"networkInterfaces": "ממשקי רשת",
|
||
"noInterfacesFound": "לא נמצאו ממשקי רשת",
|
||
"totalProcesses": "סך התהליכים",
|
||
"running": "רִיצָה",
|
||
"noProcessesFound": "לא נמצאו תהליכים",
|
||
"loginStats": "סטטיסטיקות כניסה ל-SSH",
|
||
"totalLogins": "סך כל ההתחברות",
|
||
"uniqueIPs": "כתובות IP ייחודיות",
|
||
"recentSuccessfulLogins": "כניסות מוצלחות אחרונות",
|
||
"recentFailedAttempts": "ניסיונות כושלים אחרונים",
|
||
"noRecentLoginData": "אין נתוני התחברות אחרונים",
|
||
"from": "מִן",
|
||
"quickActions": "פעולות מהירות",
|
||
"executeQuickAction": "בצע {{name}}",
|
||
"executingQuickAction": "מבצע {{name}}...",
|
||
"quickActionSuccess": "{{name}} הושלם בהצלחה",
|
||
"quickActionFailed": "{{name}} נכשל",
|
||
"quickActionError": "נכשל בביצוע {{name}}",
|
||
"ports": {
|
||
"title": "יציאות האזנה",
|
||
"protocol": "פּרוֹטוֹקוֹל",
|
||
"port": "נָמָל",
|
||
"address": "כְּתוֹבֶת",
|
||
"state": "מְדִינָה",
|
||
"process": "תַהֲלִיך",
|
||
"noData": "אין נתוני יציאות האזנה"
|
||
},
|
||
"firewall": {
|
||
"title": "חומת אש",
|
||
"active": "פָּעִיל",
|
||
"inactive": "לֹא פָּעִיל",
|
||
"notDetected": "לא זוהה",
|
||
"policy": "מְדִינִיוּת",
|
||
"rules": "כללים",
|
||
"noRules": "אין חוקים",
|
||
"noData": "אין נתוני חומת אש זמינים",
|
||
"action": "פְּעוּלָה",
|
||
"protocol": "פרוטו",
|
||
"port": "נָמָל",
|
||
"source": "מָקוֹר",
|
||
"accept": "לְקַבֵּל",
|
||
"drop": "יְרִידָה",
|
||
"reject": "לִדחוֹת",
|
||
"anywhere": "בְּכָל מָקוֹם"
|
||
}
|
||
},
|
||
"auth": {
|
||
"tagline": "מנהל שרתי SSH",
|
||
"description": "ניהול חיבורי SSH מאובטח, עוצמתי ואינטואיטיבי",
|
||
"welcomeBack": "ברוכים השבים ל-TERMIX",
|
||
"createAccount": "צור את חשבון TERMIX שלך",
|
||
"continueExternal": "המשך עם ספק חיצוני",
|
||
"loginTitle": "התחברות לטרמיקס",
|
||
"registerTitle": "צור חשבון",
|
||
"loginButton": "כְּנִיסָה לַמַעֲרֶכֶת",
|
||
"registerButton": "לִרְשׁוֹם",
|
||
"forgotPassword": "שכחת סיסמה?",
|
||
"rememberMe": "זכור אותי",
|
||
"noAccount": "אין לך חשבון?",
|
||
"hasAccount": "כבר יש לך חשבון?",
|
||
"loginSuccess": "הכניסה הצליחה",
|
||
"loginFailed": "הכניסה נכשלה",
|
||
"registerSuccess": "ההרשמה הצליחה",
|
||
"registerFailed": "ההרשמה נכשלה",
|
||
"logoutSuccess": "התנתק בהצלחה",
|
||
"invalidCredentials": "שם משתמש או סיסמה לא חוקיים",
|
||
"accountCreated": "החשבון נוצר בהצלחה",
|
||
"passwordReset": "קישור לאיפוס סיסמה נשלח",
|
||
"twoFactorAuth": "אימות דו-שלבי",
|
||
"enterCode": "הזן קוד אימות",
|
||
"backupCode": "או להשתמש בקוד גיבוי",
|
||
"verifyCode": "אימות קוד",
|
||
"redirectingToApp": "מפנה לאפליקציה...",
|
||
"enableTwoFactor": "הפעל אימות דו-שלבי",
|
||
"disableTwoFactor": "השבת אימות דו-שלבי",
|
||
"scanQRCode": "סרוק את קוד ה-QR הזה באמצעות אפליקציית האימות שלך",
|
||
"backupCodes": "קודי גיבוי",
|
||
"saveBackupCodes": "שמור את קודי הגיבוי האלה במקום בטוח",
|
||
"twoFactorEnabledSuccess": "אימות דו-שלבי הופעל בהצלחה!",
|
||
"twoFactorDisabled": "אימות דו-שלבי מושבת",
|
||
"newBackupCodesGenerated": "קודי גיבוי חדשים נוצרו",
|
||
"backupCodesDownloaded": "קודי גיבוי הורדו",
|
||
"pleaseEnterSixDigitCode": "אנא הזן קוד בן 6 ספרות",
|
||
"invalidVerificationCode": "קוד אימות לא תקין",
|
||
"failedToDisableTotp": "נכשל בהשבתת TOTP",
|
||
"failedToGenerateBackupCodes": "יצירת קודי גיבוי נכשלה",
|
||
"enterPassword": "הזן את הסיסמה שלך",
|
||
"lockedOidcAuth": "נעול (אישור OIDC)",
|
||
"twoFactorTitle": "אימות דו-שלבי",
|
||
"twoFactorProtected": "החשבון שלך מוגן באמצעות אימות דו-שלבי",
|
||
"twoFactorActive": "אימות דו-שלבי פעיל כעת בחשבונך",
|
||
"disable2FA": "השבת 2FA",
|
||
"disableTwoFactorWarning": "השבתת אימות דו-שלבי תהפוך את חשבונך לפחות מאובטח",
|
||
"passwordOrTotpCode": "סיסמה או קוד TOTP",
|
||
"or": "אוֹ",
|
||
"generateNewBackupCodesText": "צור קודי גיבוי חדשים אם איבדת את הקיימים שלך",
|
||
"generateNewBackupCodes": "צור קודי גיבוי חדשים",
|
||
"yourBackupCodes": "קודי הגיבוי שלך",
|
||
"download": "הורדה",
|
||
"setupTwoFactorTitle": "הגדר אימות דו-שלבי",
|
||
"sshAuthenticationRequired": "נדרש אימות SSH",
|
||
"sshNoKeyboardInteractive": "אימות אינטראקטיבי באמצעות מקלדת אינו זמין",
|
||
"sshAuthenticationFailed": "האימות נכשל",
|
||
"sshAuthenticationTimeout": "פסק זמן לאימות",
|
||
"sshNoKeyboardInteractiveDescription": "השרת אינו תומך באימות אינטראקטיבי באמצעות מקלדת. אנא ספק את הסיסמה או מפתח ה-SSH שלך.",
|
||
"sshAuthFailedDescription": "האישורים שסופקו היו שגויים. אנא נסה שוב עם אישורי גישה תקפים.",
|
||
"sshTimeoutDescription": "ניסיון האימות הסתיים. אנא נסה שוב.",
|
||
"sshProvideCredentialsDescription": "אנא ספק את פרטי ה-SSH שלך כדי להתחבר לשרת זה.",
|
||
"sshPasswordDescription": "הזן את הסיסמה עבור חיבור SSH זה.",
|
||
"sshKeyPasswordDescription": "אם מפתח ה-SSH שלך מוצפן, הזן את סיסמתך כאן.",
|
||
"step1ScanQR": "שלב 1: סרוק את קוד ה-QR באמצעות אפליקציית האימות שלך",
|
||
"manualEntryCode": "קוד הזנה ידנית",
|
||
"cannotScanQRText": "אם אינך מצליח לסרוק את קוד ה-QR, הזן קוד זה ידנית באפליקציית האימות שלך.",
|
||
"nextVerifyCode": "הבא: אימות קוד",
|
||
"verifyAuthenticator": "אמת את המאמת שלך",
|
||
"step2EnterCode": "שלב 2: הזינו את הקוד בן 6 הספרות מאפליקציית האימות שלכם",
|
||
"verificationCode": "קוד אימות",
|
||
"back": "בְּחֲזָרָה",
|
||
"verifyAndEnable": "אימות והפעלה",
|
||
"saveBackupCodesTitle": "שמור את קודי הגיבוי שלך",
|
||
"step3StoreCodesSecurely": "שלב 3: אחסן את הקודים האלה במקום בטוח",
|
||
"importantBackupCodesText": "שמור את קודי הגיבוי האלה במקום מאובטח. תוכל להשתמש בהם כדי לגשת לחשבונך אם תאבד את מכשיר האימות שלך.",
|
||
"completeSetup": "השלם את ההתקנה",
|
||
"notEnabledText": "אימות דו-שלבי מוסיף שכבת אבטחה נוספת על ידי דרישה להזנת קוד מאפליקציית האימות בעת הכניסה.",
|
||
"enableTwoFactorButton": "הפעל אימות דו-שלבי",
|
||
"addExtraSecurityLayer": "הוסף שכבת אבטחה נוספת לחשבונך",
|
||
"firstUser": "משתמש ראשון",
|
||
"firstUserMessage": "אתה המשתמש הראשון ותהפוך למנהל. תוכל לצפות בהגדרות מנהל המערכת בתפריט הנפתח של המשתמש בסרגל הצד. אם אתה חושב שזו טעות, בדוק את יומני ה-docker או צור בעיה ב-GitHub.",
|
||
"external": "חִיצוֹנִי",
|
||
"loginWithExternal": "התחברות עם ספק חיצוני",
|
||
"loginWithExternalDesc": "התחבר באמצעות ספק הזהויות החיצוני שתצורתו נקבעה",
|
||
"externalNotSupportedInElectron": "אימות חיצוני אינו נתמך עדיין באפליקציית Electron. אנא השתמש בגרסת האינטרנט לצורך כניסה ל-OIDC.",
|
||
"resetPasswordButton": "איפוס סיסמה",
|
||
"sendResetCode": "שלח קוד איפוס",
|
||
"resetCodeDesc": "הזן את שם המשתמש שלך כדי לקבל קוד איפוס סיסמה. הקוד יירשם ביומני המכולה של docker.",
|
||
"resetCode": "איפוס קוד",
|
||
"verifyCodeButton": "אימות קוד",
|
||
"enterResetCode": "הזן את הקוד בן 6 הספרות מיומני המכולה של docker עבור המשתמש:",
|
||
"goToLogin": "עבור אל התחברות",
|
||
"newPassword": "סיסמה חדשה",
|
||
"confirmNewPassword": "אשר סיסמה",
|
||
"enterNewPassword": "הזן את הסיסמה החדשה שלך עבור המשתמש:",
|
||
"signUp": "הרשמה",
|
||
"mobileApp": "אפליקציה לנייד",
|
||
"loggingInToMobileApp": "כניסה לאפליקציה לנייד",
|
||
"desktopApp": "אפליקציית שולחן עבודה",
|
||
"loggingInToDesktopApp": "כניסה לאפליקציית שולחן העבודה",
|
||
"loggingInToDesktopAppViaWeb": "כניסה לאפליקציית שולחן העבודה דרך ממשק האינטרנט",
|
||
"loadingServer": "טוען שרת...",
|
||
"authenticating": "מאמת...",
|
||
"dataLossWarning": "איפוס הסיסמה שלך בדרך זו ימחק את כל מארחי ה-SSH השמורים, פרטי הגישה ונתונים מוצפנים אחרים. פעולה זו אינה ניתנת לביטול. השתמש באפשרות זו רק אם שכחת את הסיסמה שלך ואינך מחובר.",
|
||
"authenticationDisabled": "אימות מושבת",
|
||
"authenticationDisabledDesc": "כל שיטות האימות מושבתות כעת. אנא צור קשר עם מנהל המערכת שלך.",
|
||
"passwordResetSuccess": "איפוס הסיסמה הצליח",
|
||
"passwordResetSuccessDesc": "הסיסמה שלך אופסה בהצלחה. כעת תוכל להתחבר באמצעות הסיסמה החדשה שלך."
|
||
},
|
||
"errors": {
|
||
"notFound": "הדף לא נמצא",
|
||
"unauthorized": "גישה לא מורשית",
|
||
"forbidden": "גישה אסורה",
|
||
"serverError": "שגיאת שרת",
|
||
"networkError": "שגיאת רשת",
|
||
"databaseConnection": "לא ניתן היה להתחבר למסד הנתונים",
|
||
"unknownError": "שגיאה לא ידועה",
|
||
"loginFailed": "הכניסה נכשלה",
|
||
"failedPasswordReset": "נכשלה הפעלת איפוס הסיסמה",
|
||
"failedVerifyCode": "נכשל אימות קוד האיפוס",
|
||
"failedCompleteReset": "נכשל השלמת איפוס הסיסמה",
|
||
"invalidTotpCode": "קוד TOTP לא חוקי",
|
||
"failedOidcLogin": "נכשל בהתחלת הכניסה ל-OIDC",
|
||
"failedUserInfo": "נכשלה קבלת פרטי המשתמש לאחר כניסה ל-OIDC",
|
||
"oidcAuthFailed": "אימות OIDC נכשל",
|
||
"noTokenReceived": "לא התקבל אסימון מהכניסה",
|
||
"invalidAuthUrl": "כתובת URL לא חוקית להרשאה התקבלה מה-backend",
|
||
"invalidInput": "קלט לא חוקי",
|
||
"requiredField": "שדה זה נדרש",
|
||
"minLength": "אורך מינימלי הוא {{min}}",
|
||
"maxLength": "האורך המקסימלי הוא {{max}}",
|
||
"invalidEmail": "כתובת דוא\"ל לא חוקית",
|
||
"passwordMismatch": "הסיסמאות אינן תואמות",
|
||
"passwordLoginDisabled": "כניסה באמצעות שם משתמש/סיסמה מושבתת כעת",
|
||
"weakPassword": "הסיסמה חלשה מדי",
|
||
"usernameExists": "שם המשתמש כבר קיים",
|
||
"emailExists": "האימייל כבר קיים",
|
||
"loadFailed": "טעינת הנתונים נכשלה",
|
||
"saveError": "השמירה נכשלה",
|
||
"sessionExpired": "הסשן פג תוקפו - אנא התחבר שוב",
|
||
"totpRateLimited": "קצב מוגבל: יותר מדי ניסיונות אימות TOTP. אנא נסה שוב מאוחר יותר.",
|
||
"totpRateLimitedWithTime": "קצב מוגבל: יותר מדי ניסיונות אימות TOTP. אנא המתן {{time}} שניות לפני שתנסה שוב.",
|
||
"resetCodeRateLimited": "קצב מוגבל: יותר מדי ניסיונות אימות. אנא נסה שוב מאוחר יותר.",
|
||
"resetCodeRateLimitedWithTime": "קצב מוגבל: יותר מדי ניסיונות אימות. אנא המתן {{time}} שניות לפני שתנסה שוב."
|
||
},
|
||
"messages": {
|
||
"saveSuccess": "נשמר בהצלחה",
|
||
"saveError": "השמירה נכשלה",
|
||
"deleteSuccess": "נמחק בהצלחה",
|
||
"deleteError": "המחיקה נכשלה",
|
||
"updateSuccess": "עודכן בהצלחה",
|
||
"updateError": "העדכון נכשל",
|
||
"copySuccess": "הועתק ללוח",
|
||
"copyError": "ההעתקה נכשלה",
|
||
"copiedToClipboard": "{{item}} הועתק ללוח",
|
||
"connectionEstablished": "נוצר חיבור",
|
||
"connectionClosed": "החיבור נסגר",
|
||
"reconnecting": "מתחבר מחדש...",
|
||
"processing": "עיבוד...",
|
||
"pleaseWait": "אנא המתן...",
|
||
"registrationDisabled": "רישום חשבון חדש מושבת כעת על ידי מנהל. אנא התחבר או צור קשר עם מנהל.",
|
||
"databaseConnected": "מסד הנתונים התחבר בהצלחה",
|
||
"databaseConnectionFailed": "נכשלה ההתחברות לשרת מסד הנתונים",
|
||
"checkServerConnection": "אנא בדוק את חיבור השרת שלך ונסה שוב",
|
||
"resetCodeSent": "איפוס קוד שנשלח ליומני Docker",
|
||
"codeVerified": "הקוד אומת בהצלחה",
|
||
"passwordResetSuccess": "איפוס הסיסמה בהצלחה",
|
||
"loginSuccess": "הכניסה הצליחה",
|
||
"registrationSuccess": "ההרשמה הצליחה"
|
||
},
|
||
"profile": {
|
||
"title": "פרופיל משתמש",
|
||
"description": "ניהול הגדרות החשבון והאבטחה שלך",
|
||
"security": "בִּטָחוֹן",
|
||
"changePassword": "שינוי סיסמה",
|
||
"twoFactorAuth": "אימות דו-שלבי",
|
||
"accountInfo": "פרטי חשבון",
|
||
"role": "תַפְקִיד",
|
||
"admin": "מְנַהֵל",
|
||
"user": "מִשׁתַמֵשׁ",
|
||
"authMethod": "שיטת אימות",
|
||
"local": "מְקוֹמִי",
|
||
"external": "חיצוני (OIDC)",
|
||
"externalAndLocal": "אימות כפול",
|
||
"selectPreferredLanguage": "בחר את השפה המועדפת עליך עבור הממשק",
|
||
"fileColorCoding": "קידוד צבע קבצים",
|
||
"fileColorCodingDesc": "קידוד צבע של קבצים לפי סוג: תיקיות (אדום), קבצים (כחול), קישורים סימבוליים (ירוק)",
|
||
"commandAutocomplete": "השלמה אוטומטית של הפקודה",
|
||
"commandAutocompleteDesc": "הפעל הצעות להשלמה אוטומטית של מקש Tab עבור פקודות מסוף בהתבסס על היסטוריית הפקודות שלך",
|
||
"defaultSnippetFoldersCollapsed": "כיווץ תיקיות קטעי טקסט כברירת מחדל",
|
||
"defaultSnippetFoldersCollapsedDesc": "כאשר הפעולה מופעלת, כל תיקיות הקטעים יכוסו כשתפתחו את לשונית הקטעים",
|
||
"terminalSyntaxHighlighting": "הדגשת תחביר הטרמינל",
|
||
"showHostTags": "הצג תגיות מארח",
|
||
"showHostTagsDesc": "הצג תגיות תחת כל מארח בסרגל הצד. השבת כדי להסתיר את כל התגיות.",
|
||
"account": "חֶשְׁבּוֹן",
|
||
"appearance": "הוֹפָעָה",
|
||
"languageLocalization": "שפה ולוקליזציה",
|
||
"fileManagerSettings": "מנהל הקבצים",
|
||
"terminalSettings": "מָסוֹף",
|
||
"hostSidebarSettings": "מארח וסרגל צד",
|
||
"snippetsSettings": "קטעי טקסט",
|
||
"updateSettings": "עדכונים",
|
||
"disableUpdateCheck": "השבתת בדיקת עדכונים",
|
||
"disableUpdateCheckDesc": "הפסק לבדוק גרסאות חדשות בעת ההפעלה ובלוח המחוונים. מפחית בקשות רשת.",
|
||
"currentPassword": "סיסמה נוכחית",
|
||
"passwordChangedSuccess": "הסיסמה שונתה בהצלחה! אנא התחבר שוב.",
|
||
"failedToChangePassword": "שינוי הסיסמה נכשל. אנא בדוק את הסיסמה הנוכחית ונסה שוב.",
|
||
"theme": "נוֹשֵׂא",
|
||
"themeLight": "אוֹר",
|
||
"themeDark": "כֵּהֶה",
|
||
"themeSystem": "מַעֲרֶכֶת",
|
||
"appearanceDesc": "בחר את ערכת הצבעים עבור האפליקציה",
|
||
"terminalSyntaxHighlightingDesc": "סמן אוטומטית פקודות, נתיבים, כתובות IP ורמות יומן בפלט הטרמינל",
|
||
"enableCommandPaletteShortcut": "הפעל קיצור דרך של לוח הפקודות",
|
||
"enableCommandPaletteShortcutDesc": "הקש פעמיים על Shift שמאלי כדי לפתוח את לוח הפקודות לגישה מהירה למארחים"
|
||
},
|
||
"user": {
|
||
"failedToLoadVersionInfo": "טעינת פרטי הגרסה נכשלה"
|
||
},
|
||
"placeholders": {
|
||
"enterCode": "000000",
|
||
"ipAddress": "127.0.0.1",
|
||
"port": "22",
|
||
"maxRetries": "3",
|
||
"retryInterval": "10",
|
||
"language": "שָׂפָה",
|
||
"username": "שם משתמש",
|
||
"hostname": "שם המארח",
|
||
"folder": "תיקייה",
|
||
"password": "סִיסמָה",
|
||
"keyPassword": "סיסמת מפתח",
|
||
"sudoPassword": "סיסמת סודו (אופציונלי)",
|
||
"notes": "הוסף הערות על מארח זה...",
|
||
"expirationDate": "בחר תאריך תפוגה",
|
||
"pastePrivateKey": "הדבק את המפתח הפרטי שלך כאן...",
|
||
"pastePublicKey": "הדבק את המפתח הציבורי שלך כאן...",
|
||
"credentialName": "שרת ה-SSH שלי",
|
||
"description": "תיאור אישורי SSH",
|
||
"searchCredentials": "חפש פרטי כניסה לפי שם, שם משתמש או תגיות...",
|
||
"sshConfig": "תצורת SSH של נקודת הקצה",
|
||
"homePath": "/בַּיִת",
|
||
"clientId": "מזהה-הלקוח-שלך",
|
||
"clientSecret": "סוד הלקוח שלך",
|
||
"authUrl": "https://your-provider.com/application/o/authorize/",
|
||
"redirectUrl": "https://your-provider.com/application/o/termix/",
|
||
"tokenUrl": "https://your-provider.com/application/o/token/",
|
||
"userIdField": "תַת",
|
||
"usernameField": "שֵׁם",
|
||
"scopes": "פרופיל דוא\"ל openid",
|
||
"userinfoUrl": "https://your-provider.com/application/o/userinfo/",
|
||
"enterUsername": "הזן שם משתמש כדי להפוך למנהל",
|
||
"searchHosts": "חפש מארחים לפי שם, שם משתמש, כתובת IP, תיקייה, תגיות...",
|
||
"enterPassword": "הזן את הסיסמה שלך",
|
||
"totpCode": "קוד TOTP בן 6 ספרות",
|
||
"searchHostsAny": "חפש מארחים (נסה: tag:prod, user:root, ip:192.168)...",
|
||
"confirmPassword": "הזן את הסיסמה שלך כדי לאשר",
|
||
"typeHere": "הקלד כאן",
|
||
"fileName": "הזן שם קובץ (לדוגמה, example.txt)",
|
||
"folderName": "הזן שם תיקייה",
|
||
"fullPath": "הזן נתיב מלא לפריט",
|
||
"currentPath": "הזן את הנתיב הנוכחי לפריט",
|
||
"newName": "הזן שם חדש",
|
||
"socks5Host": "127.0.0.1",
|
||
"socks5Username": "שם משתמש פרוקסי",
|
||
"socks5Password": "סיסמת פרוקסי",
|
||
"socks5PresetName": "לדוגמה, שרשרת VPN בעבודה",
|
||
"socks5PresetDescription": "לדוגמה, שרשרת פרוקסי לגישה לשרתי עבודה",
|
||
"moshCommand": "משתמש@שרת של mosh",
|
||
"defaultPort": "22",
|
||
"defaultEndpointPort": "224",
|
||
"defaultMaxRetries": "3",
|
||
"defaultRetryInterval": "10"
|
||
},
|
||
"leftSidebar": {
|
||
"failedToLoadHosts": "טעינת המארחים נכשלה",
|
||
"noFolder": "אין תיקייה",
|
||
"passwordRequired": "נדרשת סיסמה",
|
||
"failedToDeleteAccount": "מחיקת החשבון נכשלה",
|
||
"failedToMakeUserAdmin": "נכשל בהפיכת המשתמש למנהל",
|
||
"userIsNowAdmin": "משתמש {{username}} הוא כעת מנהל",
|
||
"removeAdminConfirm": "האם אתה בטוח שברצונך להסיר את סטטוס המנהל מ- {{username}}?",
|
||
"deleteUserConfirm": "האם אתה בטוח שברצונך למחוק את המשתמש {{username}}? פעולה זו אינה ניתנת לביטול.",
|
||
"deleteAccount": "מחיקת חשבון",
|
||
"closeDeleteAccount": "סגור מחק חשבון",
|
||
"deleteAccountWarning": "לא ניתן לבטל פעולה זו. פעולה זו תמחק לצמיתות את חשבונך ואת כל הנתונים המשויכים.",
|
||
"deleteAccountWarningDetails": "מחיקת החשבון שלך תסיר את כל הנתונים שלך, כולל מארחי SSH, תצורות והגדרות. פעולה זו אינה הפיכה.",
|
||
"deleteAccountWarningShort": "פעולה זו אינה ניתנת להפיכה ותמחק לצמיתות את חשבונך.",
|
||
"cannotDeleteAccount": "לא ניתן למחוק חשבון",
|
||
"lastAdminWarning": "אתה משתמש המנהל האחרון. אינך יכול למחוק את חשבונך מכיוון שפעולה זו תשאיר את המערכת ללא מנהלי מערכת. אנא הפוך משתמש אחר למנהל מערכת תחילה, או צור קשר עם תמיכת המערכת.",
|
||
"confirmPassword": "אשר סיסמה",
|
||
"deleting": "מוחק...",
|
||
"cancel": "לְבַטֵל"
|
||
},
|
||
"interface": {
|
||
"sidebar": "סרגל צד",
|
||
"toggleSidebar": "הפעלה/כיבוי סרגל צד",
|
||
"close": "לִסְגוֹר",
|
||
"online": "באינטרנט",
|
||
"offline": "לא מקוון",
|
||
"maintenance": "תַחזוּקָה",
|
||
"degraded": "מוּשׁפָל",
|
||
"noTunnelConnections": "לא הוגדרו חיבורי מנהרה",
|
||
"discord": "מַחֲלוֹקֶת",
|
||
"connectToSshForOperations": "התחבר ל-SSH כדי להשתמש בפעולות קבצים",
|
||
"uploadFile": "העלאת קובץ",
|
||
"newFile": "קובץ חדש",
|
||
"newFolder": "תיקייה חדשה",
|
||
"rename": "שינוי שם",
|
||
"deleteItem": "מחיקת פריט",
|
||
"createNewFile": "צור קובץ חדש",
|
||
"createNewFolder": "צור תיקייה חדשה",
|
||
"renameItem": "שינוי שם הפריט",
|
||
"clickToSelectFile": "לחץ כדי לבחור קובץ",
|
||
"noSshHosts": "אין מארחי SSH",
|
||
"sshHosts": "מארחי SSH",
|
||
"importSshHosts": "ייבוא מארחי SSH מ-JSON",
|
||
"clientId": "מזהה לקוח",
|
||
"clientSecret": "סוד הלקוח",
|
||
"error": "שְׁגִיאָה",
|
||
"warning": "אַזהָרָה",
|
||
"deleteAccount": "מחיקת חשבון",
|
||
"closeDeleteAccount": "סגור מחק חשבון",
|
||
"cannotDeleteAccount": "לא ניתן למחוק חשבון",
|
||
"confirmPassword": "אשר סיסמה",
|
||
"deleting": "מוחק...",
|
||
"externalAuth": "אימות חיצוני (OIDC)",
|
||
"configureExternalProvider": "הגדרת ספק זהויות חיצוני עבור",
|
||
"waitingForRetry": "ממתין לניסיון חוזר",
|
||
"retryingConnection": "מנסה להתחבר שוב",
|
||
"resetSplitSizes": "איפוס גדלי פיצול",
|
||
"sshManagerAlreadyOpen": "מנהל ה-SSH כבר פתוח",
|
||
"disabledDuringSplitScreen": "מושבת במהלך מסך מפוצל",
|
||
"unknown": "לֹא יְדוּעַ",
|
||
"connected": "מְחוּבָּר",
|
||
"disconnected": "מְנוּתָק",
|
||
"maxRetriesExhausted": "מקסימום ניסיונות חוזרים מותשים",
|
||
"endpointHostNotFound": "מארח נקודת הקצה לא נמצא",
|
||
"administrator": "מְנַהֵל",
|
||
"user": "מִשׁתַמֵשׁ",
|
||
"external": "חִיצוֹנִי",
|
||
"local": "מְקוֹמִי",
|
||
"saving": "חִסָכוֹן...",
|
||
"saveConfiguration": "שמור תצורה",
|
||
"loading": "טְעִינָה...",
|
||
"refresh": "לְרַעֲנֵן",
|
||
"adding": "מוֹסִיף...",
|
||
"makeAdmin": "הפוך למנהל",
|
||
"verifying": "מאמת...",
|
||
"verifyAndEnable": "אימות והפעלה",
|
||
"secretKey": "מפתח סודי",
|
||
"totpQrCode": "קוד QR של TOTP",
|
||
"passwordRequired": "נדרשת סיסמה בעת שימוש באימות סיסמה",
|
||
"sshKeyRequired": "נדרש מפתח פרטי SSH בעת שימוש באימות מפתח",
|
||
"keyTypeRequired": "נדרש סוג מפתח בעת שימוש באימות מפתח",
|
||
"validSshConfigRequired": "יש לבחור תצורת SSH חוקית מהרשימה",
|
||
"updateHost": "עדכון מארח",
|
||
"addHost": "הוסף מארח",
|
||
"editHost": "עריכת מארח",
|
||
"pinConnection": "חיבור פינים",
|
||
"authentication": "אימות",
|
||
"password": "סִיסמָה",
|
||
"key": "מַפְתֵחַ",
|
||
"sshPrivateKey": "מפתח פרטי SSH",
|
||
"keyPassword": "סיסמת מפתח",
|
||
"keyType": "סוג מפתח",
|
||
"enableTerminal": "הפעלת טרמינל",
|
||
"enableTunnel": "הפעלת מנהרה",
|
||
"enableFileManager": "הפעל את מנהל הקבצים",
|
||
"defaultPath": "נתיב ברירת מחדל",
|
||
"tunnelConnections": "חיבורי מנהרה",
|
||
"maxRetries": "מקסימום ניסיונות חוזרים",
|
||
"upload": "העלאה",
|
||
"updateKey": "מפתח עדכון",
|
||
"productionFolder": "הֲפָקָה",
|
||
"databaseServer": "שרת מסד נתונים",
|
||
"developmentServer": "שרת פיתוח",
|
||
"developmentFolder": "הִתפַּתְחוּת",
|
||
"webServerProduction": "שרת אינטרנט - ייצור",
|
||
"unknownError": "שגיאה לא ידועה",
|
||
"failedToInitiatePasswordReset": "נכשלה הפעלת איפוס הסיסמה",
|
||
"failedToVerifyResetCode": "נכשל אימות קוד האיפוס",
|
||
"failedToCompletePasswordReset": "נכשל השלמת איפוס הסיסמה",
|
||
"invalidTotpCode": "קוד TOTP לא חוקי",
|
||
"failedToStartOidcLogin": "נכשל בהתחלת הכניסה ל-OIDC",
|
||
"failedToGetUserInfoAfterOidc": "נכשלה קבלת פרטי המשתמש לאחר כניסה ל-OIDC",
|
||
"loginWithExternalProvider": "התחברות עם ספק חיצוני",
|
||
"loginWithExternal": "התחברות עם ספק חיצוני",
|
||
"sendResetCode": "שלח קוד איפוס",
|
||
"verifyCode": "אימות קוד",
|
||
"resetPassword": "איפוס סיסמה",
|
||
"login": "כְּנִיסָה לַמַעֲרֶכֶת",
|
||
"signUp": "הרשמה",
|
||
"failedToUpdateOidcConfig": "נכשל עדכון תצורת OIDC",
|
||
"failedToMakeUserAdmin": "נכשל בהפיכת המשתמש למנהל",
|
||
"failedToStartTotpSetup": "נכשל בהתחלת הגדרת TOTP",
|
||
"invalidVerificationCode": "קוד אימות לא תקין",
|
||
"failedToDisableTotp": "נכשל בהשבתת TOTP",
|
||
"failedToGenerateBackupCodes": "יצירת קודי גיבוי נכשלה"
|
||
},
|
||
"mobile": {
|
||
"selectHostToStart": "בחר מארח כדי להתחיל את הפעלת הטרמינל שלך",
|
||
"limitedSupportMessage": "תמיכת האתר בנייד עדיין בעיצומה. השתמשו באפליקציה לנייד לחוויית משתמש טובה יותר.",
|
||
"mobileAppInProgress": "אפליקציית מובייל נמצאת בתהליך פיתוח",
|
||
"mobileAppInProgressDesc": "אנחנו עובדים על אפליקציה ייעודית למובייל כדי לספק חוויה טובה יותר במכשירים ניידים.",
|
||
"viewMobileAppDocs": "התקנת אפליקציה לנייד",
|
||
"mobileAppDocumentation": "תיעוד אפליקציה לנייד"
|
||
},
|
||
"dashboard": {
|
||
"title": "לוּחַ מַחווָנִים",
|
||
"loading": "טוען לוח מחוונים...",
|
||
"github": "גיטהאב",
|
||
"support": "תְמִיכָה",
|
||
"discord": "מַחֲלוֹקֶת",
|
||
"donate": "לִתְרוֹם",
|
||
"serverOverview": "סקירת שרת",
|
||
"version": "גִרְסָה",
|
||
"upToDate": "מעודכן",
|
||
"updateAvailable": "עדכון זמין",
|
||
"uptime": "זמן פעולה",
|
||
"database": "מסד נתונים",
|
||
"healthy": "בָּרִיא",
|
||
"error": "שְׁגִיאָה",
|
||
"totalServers": "סך השרתים",
|
||
"totalTunnels": "סך המנהרות",
|
||
"totalCredentials": "סך כל האישורים",
|
||
"recentActivity": "פעילות אחרונה",
|
||
"reset": "אִתחוּל",
|
||
"loadingRecentActivity": "טוען פעילות אחרונה...",
|
||
"noRecentActivity": "אין פעילות אחרונה",
|
||
"quickActions": "פעולות מהירות",
|
||
"addHost": "הוסף מארח",
|
||
"addCredential": "הוסף אישור",
|
||
"adminSettings": "הגדרות מנהל מערכת",
|
||
"userProfile": "פרופיל משתמש",
|
||
"serverStats": "סטטיסטיקות שרת",
|
||
"loadingServerStats": "טוען סטטיסטיקות שרת...",
|
||
"noServerData": "אין נתוני שרת זמינים",
|
||
"cpu": "מעבד",
|
||
"ram": "אַיִל",
|
||
"notAvailable": "לא רלוונטי",
|
||
"customizeLayout": "התאמה אישית של לוח המחוונים",
|
||
"dashboardSettings": "הגדרות לוח המחוונים",
|
||
"enableDisableCards": "הפעלה/השבתה של כרטיסים",
|
||
"resetLayout": "איפוס לברירת מחדל",
|
||
"serverOverviewCard": "סקירת שרת",
|
||
"recentActivityCard": "פעילות אחרונה",
|
||
"networkGraphCard": "גרף הרשת",
|
||
"networkGraph": "גרף הרשת",
|
||
"quickActionsCard": "פעולות מהירות",
|
||
"serverStatsCard": "סטטיסטיקות שרת"
|
||
},
|
||
"networkGraph": {
|
||
"title": "גרף הרשת",
|
||
"addHost": "הוסף מארח",
|
||
"addGroup": "הוסף קבוצה",
|
||
"addLink": "הוסף קישור",
|
||
"deleteSelected": "מחק את הפריטים שנבחרו",
|
||
"zoomIn": "לְהִתְמַקֵד",
|
||
"zoomOut": "התקרבות",
|
||
"resetView": "איפוס תצוגה",
|
||
"exportJson": "ייצוא JSON",
|
||
"importJson": "ייבוא JSON",
|
||
"selectHost": "בחר מארח",
|
||
"chooseHost": "בחר מארח...",
|
||
"parentGroup": "קבוצת הורים",
|
||
"noGroup": "אין קבוצה",
|
||
"groupName": "שם הקבוצה",
|
||
"color": "צֶבַע",
|
||
"source": "מָקוֹר",
|
||
"target": "יַעַד",
|
||
"moveToGroup": "מעבר לקבוצה",
|
||
"selectGroup": "בחירת קבוצה...",
|
||
"addConnection": "הוסף חיבור",
|
||
"hostDetails": "פרטי המארח",
|
||
"connectToHost": "התחברות למארח",
|
||
"openTerminal": "פתח את הטרמינל",
|
||
"openFileManager": "פתח את מנהל הקבצים",
|
||
"openTunnel": "מנהרות פתוחות",
|
||
"openDocker": "פתח את דוקר",
|
||
"openServerStats": "פתיחת פרטי שרת",
|
||
"moveToGroupAction": "מעבר לקבוצה",
|
||
"removeFromGroup": "הסר מהקבוצה",
|
||
"addHostHere": "הוסף מארח כאן",
|
||
"editGroup": "עריכת קבוצה",
|
||
"delete": "לִמְחוֹק",
|
||
"cancel": "לְבַטֵל",
|
||
"add": "לְהוֹסִיף",
|
||
"create": "לִיצוֹר",
|
||
"update": "לְעַדְכֵּן",
|
||
"move": "מַהֲלָך",
|
||
"connect": "לְחַבֵּר",
|
||
"close": "לִסְגוֹר",
|
||
"createGroup": "צור קבוצה",
|
||
"noAvailableHosts": "אין מארחים זמינים",
|
||
"selectSourcePlaceholder": "בחר מקור...",
|
||
"selectTargetPlaceholder": "בחר יעד...",
|
||
"invalidFile": "קובץ לא חוקי",
|
||
"hostAlreadyExists": "המארח כבר נמצא בטופולוגיה",
|
||
"sourceTargetMustDiffer": "המקור והיעד חייבים להיות שונים",
|
||
"connectionExists": "החיבור כבר קיים",
|
||
"unknown": "לֹא יְדוּעַ",
|
||
"name": "שֵׁם",
|
||
"ip": "IP",
|
||
"status": "סטָטוּס",
|
||
"id": "תְעוּדַת זֶהוּת",
|
||
"failedToLoadData": "נכשלה טעינת נתוני טופולוגיית הרשת",
|
||
"failedToAddNode": "נכשל בהוספת הצומת",
|
||
"sourceDifferentFromTarget": "המקור והיעד חייבים להיות שונים",
|
||
"exportJSON": "ייצוא JSON",
|
||
"importJSON": "ייבוא JSON",
|
||
"searchHost": "חיפוש מארחים...",
|
||
"noHostFound": "לא נמצאו מארחים",
|
||
"searchGroup": "חיפוש קבוצות...",
|
||
"noGroupFound": "לא נמצאו קבוצות",
|
||
"searchNode": "חיפוש צמתים...",
|
||
"noNodeFound": "לא נמצאו צמתים",
|
||
"terminal": "מָסוֹף",
|
||
"fileManager": "מנהל הקבצים",
|
||
"tunnel": "מִנהָרָה",
|
||
"docker": "דוקר",
|
||
"serverStats": "סטטיסטיקות שרת"
|
||
},
|
||
"rbac": {
|
||
"shareHost": "שתף מארח",
|
||
"shareHostTitle": "שיתוף גישת מארח",
|
||
"shareHostDescription": "הענק גישה זמנית או קבועה למארח זה",
|
||
"targetUser": "משתמש היעד",
|
||
"selectUser": "בחר משתמש לשיתוף",
|
||
"duration": "מֶשֶׁך",
|
||
"durationHours": "משך (בשעות)",
|
||
"neverExpires": "לעולם לא פג תוקף",
|
||
"permissionLevel": "רמת הרשאה",
|
||
"permissionLevels": {
|
||
"readonly": "קריאה בלבד",
|
||
"readonlyDesc": "ניתן לצפות בלבד, אין צורך להזין פקודות",
|
||
"restricted": "מוגבל",
|
||
"restrictedDesc": "חוסם פקודות מסוכנות (passwd, rm -rf וכו')",
|
||
"monitored": "מנוטר",
|
||
"monitoredDesc": "מקליט את כל הפקודות אך לא חוסם (מומלץ)",
|
||
"full": "גישה מלאה",
|
||
"fullDesc": "אין הגבלות (לא מומלץ)"
|
||
},
|
||
"blockedCommands": "פקודות חסומות",
|
||
"blockedCommandsPlaceholder": "הזן פקודות לחסימה, למשל, passwd, rm, dd",
|
||
"maxSessionDuration": "משך מקסימלי של סשן (בדקות)",
|
||
"createTempUser": "צור משתמש זמני",
|
||
"createTempUserDesc": "יוצר משתמש מוגבל בשרת במקום לשתף את פרטי הגישה שלך. דורש גישת sudo. האפשרות הבטוחה ביותר.",
|
||
"expiresAt": "פג תוקף ב",
|
||
"expiresIn": "פג תוקף בעוד {{hours}} שעות",
|
||
"expired": "פג תוקף",
|
||
"grantedBy": "הוענק על ידי",
|
||
"accessLevel": "רמת גישה",
|
||
"lastAccessed": "גישה אחרונה",
|
||
"accessCount": "ספירת גישה",
|
||
"revokeAccess": "ביטול גישה",
|
||
"confirmRevokeAccess": "האם אתה בטוח שברצונך לבטל את הגישה עבור {{username}}?",
|
||
"hostSharedSuccessfully": "מארח שותף בהצלחה עם {{username}}",
|
||
"hostAccessUpdated": "גישת המארח עודכנה",
|
||
"failedToShareHost": "נכשל שיתוף המארח",
|
||
"accessRevokedSuccessfully": "הגישה בוטלה בהצלחה",
|
||
"failedToRevokeAccess": "ביטול הגישה נכשל",
|
||
"shared": "מְשׁוּתָף",
|
||
"sharedHosts": "מארחים משותפים",
|
||
"sharedWithMe": "שותף איתי",
|
||
"noSharedHosts": "לא שתפו איתך מארחים",
|
||
"owner": "בַּעַל",
|
||
"viewAccessList": "הצג רשימת גישה",
|
||
"accessList": "רשימת גישה",
|
||
"noAccessGranted": "לא הוענקה גישה למארח זה",
|
||
"noAccessGrantedMessage": "אף משתמש לא קיבל עדיין גישה למארח זה",
|
||
"manageAccessFor": "ניהול גישה עבור",
|
||
"totalAccessRecords": "{{count}} גישה לרשומות",
|
||
"neverAccessed": "לְעוֹלָם לֹא",
|
||
"timesAccessed": "{{count}} זמן/פעמים",
|
||
"daysRemaining": "{{days}} day(s)",
|
||
"hoursRemaining": "שעה/שעות {{hours}}",
|
||
"failedToFetchAccessList": "נכשלה אחזור רשימת הגישה",
|
||
"currentAccess": "גישה נוכחית",
|
||
"securityWarning": "אזהרת אבטחה",
|
||
"securityWarningMessage": "שיתוף אישורים מעניק למשתמש גישה מלאה לביצוע כל פעולה בשרת, כולל שינוי סיסמאות ומחיקת קבצים. יש לשתף רק עם משתמשים מהימנים.",
|
||
"tempUserRecommended": "אנו ממליצים להפעיל את 'צור משתמש זמני' לשיפור האבטחה.",
|
||
"roleManagement": "ניהול תפקידים",
|
||
"manageRoles": "ניהול תפקידים",
|
||
"manageRolesFor": "ניהול תפקידים עבור {{username}}",
|
||
"assignRole": "הקצאת תפקיד",
|
||
"removeRole": "הסר תפקיד",
|
||
"userRoles": "תפקידי משתמש",
|
||
"permissions": "הרשאות",
|
||
"systemRole": "תפקיד המערכת",
|
||
"customRole": "תפקיד מותאם אישית",
|
||
"roleAssignedSuccessfully": "תפקיד שהוקצה בהצלחה ל- {{username}}",
|
||
"failedToAssignRole": "הקצאת התפקיד נכשלה",
|
||
"roleRemovedSuccessfully": "התפקיד הוסר בהצלחה מ- {{username}}",
|
||
"failedToRemoveRole": "הסרת התפקיד נכשלה",
|
||
"cannotRemoveSystemRole": "לא ניתן להסיר את תפקיד המערכת",
|
||
"cannotShareWithSelf": "לא ניתן לשתף את המארח עם עצמך",
|
||
"noCustomRolesToAssign": "אין תפקידים מותאמים אישית זמינים. תפקידי מערכת מוקצים אוטומטית.",
|
||
"credentialSharingWarning": "אימות אישורים אינו נתמך לשיתוף",
|
||
"credentialRequired": "נדרשת אישור בעת שיתוף מארח",
|
||
"credentialRequiredDescription": "מארח זה אינו משתמש באימות מבוסס אישורים. על מנת לשתף מארחים, עקב הצפנה לפי משתמש, המארח חייב להשתמש באימות מבוסס אישורים.",
|
||
"auditLogs": "יומני ביקורת",
|
||
"viewAuditLogs": "צפה ביומני ביקורת",
|
||
"action": "פְּעוּלָה",
|
||
"resourceType": "סוג משאב",
|
||
"resourceName": "שם המשאב",
|
||
"timestamp": "חותמת זמן",
|
||
"ipAddress": "כתובת IP",
|
||
"userAgent": "סוכן משתמש",
|
||
"success": "הַצלָחָה",
|
||
"failed": "נִכשָׁל",
|
||
"details": "פרטים",
|
||
"noAuditLogs": "אין יומני ביקורת זמינים",
|
||
"sessionRecordings": "הקלטות סשן",
|
||
"viewRecording": "צפה בהקלטה",
|
||
"downloadRecording": "הורד את ההקלטה",
|
||
"dangerousCommand": "זוהתה פקודה מסוכנת",
|
||
"commandBlocked": "פקודה חסומה",
|
||
"terminateSession": "סיום סשן",
|
||
"sessionTerminated": "הסשן הסתיים על ידי בעל המארח",
|
||
"sharedAccessExpired": "הגישה המשותפת שלך למארח זה פגה",
|
||
"sharedAccessExpiresIn": "תוקף הגישה המשותפת פג בעוד {{hours}} שעות",
|
||
"roles": {
|
||
"label": "תפקידים",
|
||
"admin": "מְנַהֵל",
|
||
"user": "מִשׁתַמֵשׁ"
|
||
},
|
||
"createRole": "צור תפקיד",
|
||
"editRole": "עריכת תפקיד",
|
||
"roleName": "שם התפקיד",
|
||
"displayName": "שם תצוגה",
|
||
"description": "תֵאוּר",
|
||
"assignRoles": "הקצאת תפקידים",
|
||
"userRoleAssignment": "הקצאת תפקידי משתמש",
|
||
"selectUserPlaceholder": "בחר משתמש",
|
||
"searchUsers": "חיפוש משתמשים...",
|
||
"noUserFound": "לא נמצא משתמש",
|
||
"currentRoles": "תפקידים נוכחיים",
|
||
"noRolesAssigned": "לא הוקצו תפקידים",
|
||
"assignNewRole": "הקצאת תפקיד חדש",
|
||
"selectRolePlaceholder": "בחר תפקיד",
|
||
"searchRoles": "חיפוש תפקידים...",
|
||
"noRoleFound": "לא נמצא תפקיד",
|
||
"assign": "לְהַקְצוֹת",
|
||
"roleCreatedSuccessfully": "תפקיד נוצר בהצלחה",
|
||
"roleUpdatedSuccessfully": "התפקיד עודכן בהצלחה",
|
||
"roleDeletedSuccessfully": "התפקיד נמחק בהצלחה",
|
||
"failedToLoadRoles": "טעינת התפקידים נכשלה",
|
||
"failedToSaveRole": "שמירת התפקיד נכשלה",
|
||
"failedToDeleteRole": "מחיקת התפקיד נכשלה",
|
||
"roleDisplayNameRequired": "נדרש שם תצוגה של התפקיד",
|
||
"roleNameRequired": "שם תפקיד נדרש",
|
||
"roleNameHint": "השתמשו רק באותיות קטנות, מספרים, קווים תחתונים ומקפים",
|
||
"displayNamePlaceholder": "מפתח",
|
||
"descriptionPlaceholder": "מפתחי תוכנה ומהנדסים",
|
||
"confirmDeleteRole": "מחיקת תפקיד",
|
||
"confirmDeleteRoleDescription": "האם אתה בטוח שברצונך למחוק את התפקיד '{{name}}'? לא ניתן לבטל פעולה זו.",
|
||
"confirmRemoveRole": "הסר תפקיד",
|
||
"confirmRemoveRoleDescription": "האם אתה בטוח שברצונך להסיר את התפקיד הזה מהמשתמש?",
|
||
"editRoleDescription": "עדכון פרטי התפקיד",
|
||
"createRoleDescription": "צור תפקיד מותאם אישית חדש לקיבוץ משתמשים",
|
||
"assignRolesDescription": "ניהול הקצאות תפקידים עבור משתמשים",
|
||
"noRoles": "לא נמצאו תפקידים",
|
||
"selectRole": "בחר תפקיד",
|
||
"type": "סוּג",
|
||
"user": "מִשׁתַמֵשׁ",
|
||
"role": "תַפְקִיד",
|
||
"saveHostFirst": "שמור מארח תחילה",
|
||
"saveHostFirstDescription": "אנא שמור את המארח לפני קביעת הגדרות השיתוף.",
|
||
"shareWithUser": "שתף עם משתמש",
|
||
"shareWithRole": "שתף עם תפקיד",
|
||
"share": "לַחֲלוֹק",
|
||
"target": "יַעַד",
|
||
"expires": "פג תוקף",
|
||
"never": "לְעוֹלָם לֹא",
|
||
"noAccessRecords": "לא נמצאו רשומות גישה",
|
||
"sharedSuccessfully": "שותף בהצלחה",
|
||
"failedToShare": "השיתוף נכשל",
|
||
"confirmRevokeAccessDescription": "האם אתה בטוח שברצונך לבטל גישה זו?",
|
||
"hours": "שעות",
|
||
"sharing": "שיתוף",
|
||
"selectUserAndRole": "אנא בחר משתמש ותפקיד",
|
||
"view": "צפייה בלבד",
|
||
"viewDesc": "עקב מערכת ההצפנה של Termix, רמות הרשאה נוספות יגיעו במועד מאוחר יותר."
|
||
},
|
||
"commandPalette": {
|
||
"searchPlaceholder": "חיפוש מארחים או פעולות מהירות...",
|
||
"recentActivity": "פעילות אחרונה",
|
||
"navigation": "ניווט",
|
||
"addHost": "הוסף מארח",
|
||
"addCredential": "הוסף אישור",
|
||
"adminSettings": "הגדרות מנהל מערכת",
|
||
"userProfile": "פרופיל משתמש",
|
||
"updateLog": "יומן עדכון",
|
||
"hosts": "מארחים",
|
||
"openServerDetails": "פתיחת פרטי שרת",
|
||
"openFileManager": "פתח את מנהל הקבצים",
|
||
"edit": "לַעֲרוֹך",
|
||
"links": "קישורים",
|
||
"github": "גיטהאב",
|
||
"support": "תְמִיכָה",
|
||
"discord": "מַחֲלוֹקֶת",
|
||
"donate": "לִתְרוֹם",
|
||
"press": "לִלְחוֹץ",
|
||
"toToggle": "כדי להחליף",
|
||
"close": "לִסְגוֹר",
|
||
"hostManager": "מנהל מארח",
|
||
"pressToToggle": "לחצו פעמיים על Shift שמאלי כדי לפתוח את לוח הפקודות"
|
||
},
|
||
"docker": {
|
||
"notEnabled": "Docker אינו מופעל עבור מארח זה",
|
||
"validating": "מאמת את Docker...",
|
||
"connectingToHost": "מתחבר למארח...",
|
||
"connecting": "מְקַשֵׁר...",
|
||
"error": "שְׁגִיאָה",
|
||
"errorCode": "קוד שגיאה: {{code}}",
|
||
"version": "דוקר {{version}}",
|
||
"connectionFailed": "נכשלה ההתחברות ל-Docker",
|
||
"totpVerificationFailed": "אימות TOTP נכשל. אנא נסה שוב.",
|
||
"warpgateVerificationFailed": "אימות Warpgate נכשל. אנא נסה שוב.",
|
||
"verificationCodePrompt": "הזן קוד אימות",
|
||
"loadingContainers": "טוען מכולות...",
|
||
"containerStarted": "מיכל {{name}} הופעל",
|
||
"failedToStartContainer": "נכשל בהפעלת המכולה {{name}}",
|
||
"containerStopped": "מיכל {{name}} נעצר",
|
||
"failedToStopContainer": "נכשלה עצירת המכולה {{name}}",
|
||
"containerRestarted": "מיכל {{name}} הופעל מחדש",
|
||
"failedToRestartContainer": "נכשלה ההפעלה מחדש של המכולה {{name}}",
|
||
"containerPaused": "מיכל {{name}} הושהה",
|
||
"containerUnpaused": "השהיית המיכל {{name}} בוטלה",
|
||
"failedToTogglePauseContainer": "נכשל הניסיון להחליף את מצב ההשהיה עבור המכולה {{name}}",
|
||
"containerRemoved": "המיכל {{name}} הוסר",
|
||
"failedToRemoveContainer": "נכשלה הסרת המיכל {{name}}",
|
||
"image": "תְמוּנָה",
|
||
"idLabel": "תְעוּדַת זֶהוּת",
|
||
"ports": "נמלים",
|
||
"noPorts": "אין יציאות",
|
||
"created": "נוצר",
|
||
"start": "הַתחָלָה",
|
||
"stop": "לְהַפְסִיק",
|
||
"pause": "הַפסָקָה",
|
||
"unpause": "ביטול השהייה",
|
||
"restart": "הפעלה מחדש",
|
||
"remove": "לְהַסִיר",
|
||
"removeContainer": "הסר את המיכל",
|
||
"confirmRemoveContainer": "האם אתה בטוח שברצונך להסיר את המכולה '{{name}}'? לא ניתן לבטל פעולה זו.",
|
||
"runningContainerWarning": "אזהרה: מיכל זה פועל כעת. הסרתו תעצור את המיכל תחילה.",
|
||
"removing": "מסיר...",
|
||
"noContainersFound": "לא נמצאו מכולות",
|
||
"noContainersFoundHint": "אין מכולות Docker זמינות במארח זה",
|
||
"searchPlaceholder": "חיפוש מכולות...",
|
||
"filterByStatusPlaceholder": "סנן לפי סטטוס",
|
||
"allContainersCount": "הכל ({{count}})",
|
||
"statusCount": "{{status}} ({{count}})",
|
||
"noContainersMatchFilters": "אין מכולות התואמות את המסננים שלך",
|
||
"noContainersMatchFiltersHint": "נסה להתאים את קריטריוני החיפוש או הסינון שלך",
|
||
"containerMustBeRunningToViewStats": "יש להפעיל את המכולה כדי להציג נתונים סטטיסטיים",
|
||
"failedToFetchStats": "נכשלה אחזור סטטיסטיקות המכולה",
|
||
"containerNotRunning": "המכולה לא פועלת",
|
||
"startContainerToViewStats": "הפעל את המכולה כדי להציג נתונים סטטיסטיים",
|
||
"loadingStats": "טוען סטטיסטיקות...",
|
||
"errorLoadingStats": "שגיאה בטעינת סטטיסטיקות",
|
||
"noStatsAvailable": "אין סטטיסטיקות זמינות",
|
||
"cpuUsage": "שימוש במעבד",
|
||
"current": "נוֹכְחִי",
|
||
"memoryUsage": "שימוש בזיכרון",
|
||
"usedLimit": "בשימוש / מגבלה",
|
||
"percentage": "אֲחוּזִים",
|
||
"networkIo": "קלט/פלט של הרשת",
|
||
"input": "קֶלֶט",
|
||
"output": "תְפוּקָה",
|
||
"blockIo": "בלוק קלט/פלט",
|
||
"read": "לִקְרוֹא",
|
||
"write": "לִכתוֹב",
|
||
"pids": "PIDs",
|
||
"containerInformation": "מידע על המכולה",
|
||
"name": "שֵׁם",
|
||
"id": "תְעוּדַת זֶהוּת",
|
||
"state": "מְדִינָה",
|
||
"disconnectedFromContainer": "מנותק מהמיכל",
|
||
"containerMustBeRunning": "יש לפעול על מנת לגשת למסוף.",
|
||
"authenticationRequired": "נדרש אימות",
|
||
"connectedTo": "מחובר אל {{containerName}}",
|
||
"disconnected": "מְנוּתָק",
|
||
"consoleError": "שגיאת קונסולה",
|
||
"errorMessage": "שגיאה: {{message}}",
|
||
"failedToConnect": "נכשל החיבור למכולה",
|
||
"console": "לְנַחֵם",
|
||
"selectShell": "בחר מעטפת",
|
||
"bash": "לַחֲבוֹט",
|
||
"sh": "ש",
|
||
"ash": "אֵפֶר",
|
||
"connect": "לְחַבֵּר",
|
||
"disconnect": "לְנַתֵק",
|
||
"notConnected": "לא מחובר",
|
||
"clickToConnect": "לחץ על התחבר כדי להתחיל סשן מעטפת",
|
||
"connectingTo": "מתחבר אל {{containerName}}...",
|
||
"containerNotFound": "המיכל לא נמצא",
|
||
"backToList": "חזרה לרשימה",
|
||
"logs": "יומני רישום",
|
||
"stats": "סטטיסטיקות",
|
||
"consoleTab": "לְנַחֵם",
|
||
"startContainerToAccess": "הפעל את המכולה כדי לגשת לקונסולה",
|
||
"log": {
|
||
"connecting": "מתחבר למארח Docker...",
|
||
"authStarted": "פתרון פרטי אימות...",
|
||
"totpRequired": "נדרש אימות TOTP",
|
||
"warpgateRequired": "נדרש אימות Warpgate",
|
||
"sessionCreated": "הוקמה סשן SSH של Docker",
|
||
"sessionReady": "מוכן לפעולות Docker",
|
||
"error": "חיבור Docker נכשל: {{error}}"
|
||
}
|
||
},
|
||
"stats": {
|
||
"log": {
|
||
"connecting": "מתחיל איסוף מדדים...",
|
||
"existingSession": "שימוש בסשן מדדים קיים",
|
||
"totpVerifying": "נדרש אימות TOTP",
|
||
"sessionEstablished": "סשן מדדים נוצר",
|
||
"collecting": "איסוף מדדי שרת",
|
||
"heartbeat": "שמירה על קשר חי",
|
||
"stopped": "איסוף המדדים הופסק",
|
||
"error": "איסוף המדדים נכשל: {{error}}"
|
||
}
|
||
},
|
||
"sftp": {
|
||
"log": {
|
||
"connecting": "מתחבר לשרת SFTP...",
|
||
"jumpHost": "מתחבר דרך קפיצה מארח {{host}}...",
|
||
"connected": "נוצר חיבור SFTP",
|
||
"authFailed": "האימות נכשל",
|
||
"error": "פעולת SFTP נכשלה: {{error}}"
|
||
}
|
||
},
|
||
"theme": {
|
||
"switchToLight": "מעבר לתאורה",
|
||
"switchToDark": "עבור למצב כהה"
|
||
}
|
||
}
|