feat: harden local shell, SFTP, and desktop session reliability
Finder-launched terminals now inherit a login PATH so tools like ollama resolve, destructive SFTP/editor actions require confirmation, and terminal search plus window dragging work again. SSH forwards and RDP sessions keep listeners and survive reconnect without FastPath crashes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
188f3556ed
commit
08696896f9
223 files changed
+13493
-3423
No files matched your search
@@ -1,9 +1,7 @@
|
||||
{
|
||||
"nav": {
|
||||
"general": "Workspace",
|
||||
"generalDesc": "Layout and resources",
|
||||
"appearance": "Appearance",
|
||||
"appearanceDesc": "Theme and language",
|
||||
"general": "General",
|
||||
"generalDesc": "Theme, language, and layout",
|
||||
"terminal": "Terminal",
|
||||
"terminalDesc": "Font and colors",
|
||||
"shortcuts": "Shortcuts",
|
||||
@@ -15,11 +13,13 @@
|
||||
"ai": "AI models",
|
||||
"aiDesc": "AI providers",
|
||||
"about": "About",
|
||||
"aboutDesc": "Version and data"
|
||||
"aboutDesc": "Version and data",
|
||||
"account": "Account",
|
||||
"accountDesc": "Email, license, and device"
|
||||
},
|
||||
"title": "Settings",
|
||||
"search": {
|
||||
"placeholder": "Search settings..."
|
||||
"placeholder": "Search settings…"
|
||||
},
|
||||
"language": {
|
||||
"label": "Language",
|
||||
@@ -89,7 +89,7 @@
|
||||
"ssh": {
|
||||
"connection": "Connection",
|
||||
"keepAlive": "Keep-alive",
|
||||
"keepAliveDesc": "Send keep-alive when idle to reduce disconnects",
|
||||
"keepAliveDesc": "Send SSH keep-alive while idle; disconnect only after several missed replies",
|
||||
"autoReconnect": "Auto reconnect",
|
||||
"autoReconnectDesc": "Automatically retry after unexpected disconnects",
|
||||
"timeout": "Connection timeout",
|
||||
@@ -102,7 +102,9 @@
|
||||
"maxBackground": "Background connection limit",
|
||||
"maxBackgroundDesc": "Evict least recently used connections when over limit",
|
||||
"suspend": "Background suspend",
|
||||
"suspendDesc": "Minutes before releasing active channels when a tab is in background"
|
||||
"suspendDesc": "Minutes before idle background tabs suspend (active Shell/SFTP stay connected)",
|
||||
"keepAliveInterval": "Keep-alive interval (sec)",
|
||||
"keepAliveIntervalDesc": "How often to ping the server (like ClientAliveInterval). Use 15s or less on flaky Wi‑Fi / NAT"
|
||||
},
|
||||
"security": {
|
||||
"credentials": "Credential protection",
|
||||
@@ -119,7 +121,7 @@
|
||||
"clearConfirm": "Clear all known host keys? You will be prompted again on next connect."
|
||||
},
|
||||
"about": {
|
||||
"tagline": "A lightweight native SSH / SFTP ops terminal",
|
||||
"tagline": "Simple, practical native ops terminal",
|
||||
"appVersion": "App v{{version}}",
|
||||
"copyVersion": "Copy version info",
|
||||
"runtime": "Runtime",
|
||||
@@ -127,8 +129,9 @@
|
||||
"localData": "Local data",
|
||||
"sessionsSettings": "Sessions and settings",
|
||||
"masterKeyPath": "Master key",
|
||||
"privacyNote": "Passwords and key passphrases are encrypted with AES-256-GCM in Rust. OpsXShell does not save terminal command history.",
|
||||
"license": "MIT License · Rust · XTerm.js"
|
||||
"privacyNote": "Passwords and key passphrases are AES-256-GCM encrypted in Rust. No terminal history, no bastion audit trail.",
|
||||
"license": "MIT License · Rust · XTerm.js",
|
||||
"logPath": "Application log"
|
||||
},
|
||||
"ai": {
|
||||
"presets": "Provider presets",
|
||||
@@ -162,13 +165,42 @@
|
||||
"apiKeySaveFailed": "Failed to save API key",
|
||||
"providerNotFound": "Provider not found",
|
||||
"modelCatalogReadFailed": "Failed to read model catalog",
|
||||
"catalogUnavailable": "models.dev is unavailable"
|
||||
"catalogUnavailable": "models.dev is unavailable",
|
||||
"family": {
|
||||
"openai_compatible": "OpenAI compatible",
|
||||
"standalone": "Native APIs",
|
||||
"plan": "Subscription plans",
|
||||
"local": "Self-hosted",
|
||||
"custom": "Custom"
|
||||
}
|
||||
},
|
||||
"family": {
|
||||
"openai_compatible": "OpenAI compatible",
|
||||
"standalone": "────────",
|
||||
"plan": "Plan",
|
||||
"local": "Self-hosted",
|
||||
"custom": "Custom"
|
||||
"account": {
|
||||
"title": "Account",
|
||||
"email": "Email",
|
||||
"emailDesc": "Used for checkout and license claims",
|
||||
"plan": "Current plan",
|
||||
"planFree": "Free",
|
||||
"planYearly": "Pro Yearly",
|
||||
"planPerpetual": "Pro Perpetual",
|
||||
"planTrial": "Pro Trial",
|
||||
"expires": "Expires {{date}}",
|
||||
"lifetime": "Lifetime",
|
||||
"devices": "Seats: up to {{count}} devices",
|
||||
"deviceId": "This device ID",
|
||||
"saveEmail": "Save email",
|
||||
"activate": "Activate license",
|
||||
"pasteLicense": "Paste LIC- license key",
|
||||
"clear": "Clear local license",
|
||||
"deactivate": "Deactivate this device",
|
||||
"upgrade": "Upgrade",
|
||||
"saved": "Saved",
|
||||
"activateOk": "Activated",
|
||||
"deviceList": "Bound devices",
|
||||
"loadingDevices": "Loading devices…",
|
||||
"noDevices": "No bound devices",
|
||||
"thisDevice": "This device",
|
||||
"removeDevice": "Unbind",
|
||||
"deviceRemoved": "Device unbound",
|
||||
"seatFull": "All seats are in use. Unbind another device before activating on a new machine."
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user