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:
Logan.LiandCursor committed 2026-08-16 16:08:11 +08:00
1 parent 188f3556ed
commit 08696896f9
223 files changed
+13493 -3423

No files matched your search

+54 -24
View File
@@ -3,8 +3,9 @@
"local": "로컬",
"remote": "원격",
"notConnectedTitle": "원격 서버에 연결되지 않음",
"notConnectedDesc": "SFTP를 사용하려면 먼저 SSH 세션을 연결하세요",
"ariaLabel": "{{title}} 파일 패널"
"notConnectedDesc": "먼저 SSH에 연결한 뒤 전송·편집",
"ariaLabel": "{{title}} 파일 패널",
"reconnectResumeDesc": "연결이 끊겼습니다. 다시 연결하면 {{path}}(으)로 복귀합니다"
},
"connection": {
"selectServer": "서버 선택",
@@ -12,7 +13,9 @@
"createSessionHint": "먼저 사이드바에서 세션을 생성하세요",
"reconnect": "재연결",
"notConnected": "연결되지 않음",
"connecting": "연결 중..."
"connecting": "연결 중...",
"resumeHint": "다시 연결하면 {{path}}(으)로 복귀합니다",
"reconnectingResume": "{{path}} 복원하며 다시 연결 중…"
},
"errors": {
"notConnected": "SFTP가 연결되지 않았습니다",
@@ -23,19 +26,14 @@
"selectDownloadFiles": "먼저 다운로드할 파일을 선택하세요",
"uploadFailed": "업로드 실패",
"downloadFailed": "다운로드 실패",
"fileError": "{{fileName}}: {{message}}"
"fileError": "{{fileName}}: {{message}}",
"mkdirFailed": "폴더 만들기 실패"
},
"toolbar": {
"upload": "업로드",
"uploadAria": "업로드",
"download": "다운로드",
"downloadAria": "다운로드",
"downloadNeedSelection": "먼저 원격 파일을 선택하세요",
"downloadHint": "선택한 원격 파일 다운로드",
"refresh": "새로고침",
"refreshAria": "새로고침",
"refreshAria": "이 패널 새로고침",
"newFolder": "새 폴더",
"newFolderAria": "새 폴더"
"newFolderAria": "이 패널에 새 폴더 만들기"
},
"sort": {
"name": "이름",
@@ -55,7 +53,8 @@
"hideHidden": "도트파일 숨기기 (.xxx)",
"showHiddenAria": "숨김 파일 표시",
"hideHiddenAria": "도트파일 숨기기",
"searchAria": "{{title}}에서 검색"
"searchAria": "{{title}}에서 검색",
"upAtRoot": "이미 루트입니다"
},
"status": {
"loading": "불러오는 중...",
@@ -63,7 +62,8 @@
"filtered": "{{shown}} / {{total}} 표시 중",
"hiddenCount": "전체 {{total}}개 항목 ({{hidden}}개 숨김)",
"total": "{{count}}개 항목",
"filterHint": "필터: {{query}}"
"filterHint": "필터: {{query}}",
"refreshing": "새로 고치는 중..."
},
"empty": {
"dirTitle": "빈 디렉터리",
@@ -99,7 +99,6 @@
"download": "다운로드",
"edit": "편집",
"rename": "이름 변경",
"copyPath": "경로 복사",
"properties": "속성",
"permissions": "권한",
"delete": "삭제"
@@ -116,7 +115,18 @@
"chmodTitle": "권한 편집",
"chmodApply": "적용",
"pickUploadTitle": "업로드할 파일 또는 폴더 선택",
"pickUploadRzTitle": "업로드할 파일 선택 (rz)"
"pickUploadRzTitle": "업로드할 파일 선택 (rz)",
"overwriteTitle": "기존 파일을 덮어쓸까요?",
"overwriteConfirm": "덮어쓰기",
"overwriteSkip": "건너뛰기",
"overwriteOneRemote": "원격에 「{{name}}」이(가) 있습니다. 덮어쓸까요?",
"overwriteOneLocal": "로컬에 「{{name}}」이(가) 있습니다. 덮어쓸까요?",
"overwriteManyRemote": "원격에 같은 이름 {{count}}개가 있습니다. 모두 덮어쓸까요?",
"overwriteManyLocal": "로컬에 같은 이름 {{count}}개가 있습니다. 모두 덮어쓸까요?",
"overwriteMore": "…외 {{count}}개",
"deleteTitle": "삭제 확인",
"deleteMessage": "{{count}}개 항목을 삭제합니다: {{names}}",
"deleteRecursiveWarn": "폴더가 포함되어 있습니다. 재귀 삭제되며 되돌릴 수 없습니다."
},
"properties": {
"name": "이름",
@@ -152,27 +162,41 @@
"statusDone": "완료",
"statusFailed": "실패",
"statusCancelled": "취소됨",
"dropUpload": "{{path}}에 업로드",
"dropDownload": "{{path}}에 다운로드"
"dropUpload": "{{path}}(으)로 업로드하려면 여기에 놓으세요",
"dropDownload": "{{path}}(으)로 다운로드하려면 여기에 놓으세요",
"railAria": "로컬과 원격 간 전송",
"railUpload": "선택한 로컬 파일 업로드(선택 없으면 파일 선택)",
"railDownload": "선택한 원격 파일을 로컬로 다운로드",
"railUploadAria": "원격으로 업로드",
"railDownloadAria": "로컬로 다운로드",
"railDownloadNeedSelection": "먼저 원격 파일을 선택하세요",
"retry": "다시 시도"
},
"editor": {
"readFailed": "읽기 실패",
"saveFailed": "저장 실패",
"unsavedClose": "저장되지 않은 변경 사항이 있습니다. 그래도 닫으시겠습니까?",
"unsavedTitle": "저장되지 않은 변경 사항",
"discardAndClose": "버리고 닫기",
"reloadTitle": "다시 로드",
"discardAndReload": "버리고 다시 로드",
"saving": "저장 중...",
"save": "저장",
"saved": "파일 저장됨",
"loadingEditor": "에디터 로드 중...",
"footer": "UTF-8 · Monaco · ⌘/Ctrl+S 저장 · 최대 ~2MB",
"loadBlocked": "파일 내용을 불러오지 못했습니다",
"footer": "UTF-8 · ⌘/Ctrl+S 저장 · Esc 닫기 · 최대 약 2MB",
"charCount": "{{count}}자",
"unsavedMark": " · 저장 안 됨",
"savedMark": " · 저장됨"
"savedMark": " · 저장됨",
"title": "{{name}} 편집",
"dirtyBadge": "저장 안 됨",
"reload": "다시 불러오기",
"unsavedReload": "저장되지 않은 변경을 버리고 다시 불러올까요?"
},
"toast": {
"renamed": "{{name}}(으)로 이름 변경됨",
"renameFailed": "이름 변경 실패",
"pathCopied": "경로가 클립보드에 복사됨",
"pathCopyFailed": "경로 복사 실패",
"chmodUpdated": "권한이 {{mode}}(으)로 업데이트됨",
"chmodFailed": "권한 업데이트 실패",
"uploadPartial": "{{action}} 완료 {{completed}}, 실패 {{failed}}: {{detail}}",
@@ -180,7 +204,13 @@
"uploadAction": "업로드",
"downloadAction": "다운로드",
"noFolderUpload": "폴더 업로드 실패",
"noDragPath": "드래그 앤 드롭 경로를 사용할 수 없습니다; 업로드를 사용하세요",
"noFolderRecursive": "재귀 폴더 전송 실패; 재시도하거나 업로드를 사용하세요"
"noDragPath": "이 환경에서는 드래그 경로를 제공하지 않습니다. 가운데 → 또는 파일 선택을 사용하세요.",
"noFolderRecursive": "폴더 전송에 실패했습니다. 다시 시도하거나 가운데 → / 파일 선택을 사용하세요.",
"dropFailed": "끌어다 놓기 실패: 파일 정보를 읽지 못했습니다. 다시 시도하거나 가운데 화살표를 사용하세요.",
"folderCreated": "폴더 {{name}} 생성됨",
"allSkippedExisting": "이미 있는 파일을 모두 건너뛰었습니다",
"skippedExisting": "기존 파일 {{count}}개를 건너뛰었습니다",
"deleteFailed": "삭제 실패",
"deleted": "삭제됨"
}
}