{
  "channel": {
    "tab": "채널",
    "chatTab": "채팅",
    "moreTabs": "더 많은 탭",
    "empty": "아직 채널이 없어요 ✿",
    "dmLabel": "메시지",
    "dmHint": "주 에이전트 전용",
    "groupLabel": "채널",
    "noMessages": "아직 메시지가 없어요",
    "nameExists": "이미 같은 이름의 채널이 있어요",
    "membersCount": " 명",
    "info": "채널 정보",
    "readOnly": "🔒 에이전트 간 비공개 메시지예요. 열람만 가능해요",
    "inputPlaceholder": "메시지를 보내세요...",
    "sendFailed": "전송 실패",
    "createTitle": "새 채널",
    "createName": "채널 이름",
    "createNamePlaceholder": "예: design-team",
    "createMembers": "멤버",
    "createIntro": "설명",
    "createIntroPlaceholder": "이 채널의 용도를 설명해 주세요...",
    "createCancel": "취소",
    "createConfirm": "만들기",
    "nameRequired": "채널 이름을 입력해 주세요",
    "minMembers": "최소 2명 이상 선택해 주세요",
    "created": "채널 #{name} 생성 완료 ✿",
    "createFailed": "생성 실패",
    "alreadyExists": "이미 존재하는 채널이에요",
    "deleteChannel": "채널 삭제",
    "deleteConfirm": "채널 \"{name}\"을(를) 삭제할까요? 대화 기록은 복구할 수 없어요.",
    "deleted": "채널이 삭제되었어요",
    "deleteFailed": "삭제 실패",
    "warningTitle": "채널에 대해서",
    "warningBody": "서로 다른 기억과 사고방식을 가진 어시스턴트끼리 대화하면 더 많은 영감이 떠오를 수 있다고 생각해서, 당신이 자리를 비운 사이에도 에이전트끼리 대화할 수 있는 공간을 만들었어요.\n\n채널은 실험적 기능이라 다음과 같은 상황이 발생할 수 있어요:\n1. token 사용량 증가\n2. 예상치 못한 응답\n3. 기억 혼동\n\n주의해서 사용해 주세요",
    "warningConfirm": "이해했어요, 채널을 활성화할게요",
    "disabled": "채널 기능이 꺼져 있어요",
    "toggleLabel": "채널 기능 전환",
    "members": "멤버",
    "createIntroOptional": "설명"
  },
  "sidebar": {
    "title": "대화",
    "newChat": "새 대화",
    "collapse": "사이드바 접기",
    "expand": "대화 목록 펼치기",
    "empty": "아직 대화가 없어요 ✿",
    "activity": "활동",
    "jian": "책상",
    "bridge": "소셜 플랫폼",
    "toggle": "사이드바",
    "bridgeShort": "연결"
  },
  "session": {
    "untitled": "새 대화",
    "messageCount": "{n}개의 메시지",
    "switchFailed": "세션 전환 실패",
    "createFailed": "세션 생성 실패",
    "archiveFailed": "세션 보관 실패",
    "rename": "이름 변경",
    "archived": {
      "entry": "보관된 대화",
      "title": "보관된 대화",
      "empty": "보관된 대화가 없습니다",
      "stats": "{count}개 · {size}",
      "cleanup30": "30일 이상 정리",
      "cleanup90": "90일 이상 정리",
      "cleanupConfirm": "{count}개의 보관 항목({size})을 영구 삭제합니다. 되돌릴 수 없습니다. 계속할까요?",
      "cleanupDone": "{count}개 보관 항목을 정리했습니다",
      "cleanupNoMatch": "조건에 맞는 보관 항목이 없습니다",
      "restore": "복원",
      "restoreConfirm": "이 대화를 원래 위치로 복원할까요?",
      "restoreConflict": "원래 위치가 점유되어 복원할 수 없습니다",
      "restoreFailed": "복원 실패",
      "deleteForever": "영구 삭제",
      "deleteConfirm": "이 보관 항목을 영구 삭제할까요? 되돌릴 수 없습니다.",
      "deleteFailed": "삭제 실패",
      "daysAgo": "{days}일 전 보관됨"
    }
  },
  "common": {
    "on": "켜기",
    "off": "끄기",
    "copy": "복사",
    "copied": "복사됨",
    "copyText": "텍스트 복사",
    "confirm": "확인",
    "cancel": "취소",
    "approve": "승인",
    "reject": "거부",
    "approved": "승인됨",
    "rejected": "거부됨",
    "changeRejected": "{label} 변경이 취소되었습니다",
    "changeTimeout": "{label} 확인 시간 초과",
    "noChats": "대화 없음",
    "noFiles": "파일 없음",
    "executing": "실행 중...",
    "user": "사용자",
    "me": "나",
    "more": "더보기",
    "empty": "비어 있음",
    "edit": "편집",
    "screenshot": "스크린샷",
    "selectMessage": "메시지 선택",
    "screenshotSaved": "작업 디렉터리의 「截图」 폴더에 스크린샷이 저장되었습니다",
    "screenshotFailed": "스크린샷 저장 실패",
    "selectedCount": "{count}개 선택됨",
    "allDone": "모두 완료"
  },
  "chat": {
    "send": "보내기",
    "steer": "방향 전환",
    "stop": "중지",
    "browserScreenshot": "브라우저 스크린샷",
    "compacting": "컨텍스트 압축 중",
    "visionAuxiliary": "보조 시각"
  },
  "time": {
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "daysAgo": "{n}일 전",
    "dateFormat": "{m}/{d}",
    "today": "오늘",
    "yesterday": "어제",
    "thisWeek": "이번 주",
    "earlier": "이전"
  },
  "status": {
    "connecting": "연결 중...",
    "connected": "연결됨",
    "disconnected": "연결 끊김",
    "serverNotReady": "서버가 준비되지 않았어요",
    "loading": "로딩 중...",
    "reconnecting": "재연결 중",
    "reconnect": "다시 연결"
  },
  "input": {
    "placeholder": "무슨 이야기든 해보세요...",
    "selectFolder": "폴더 선택",
    "workspace": "작업 공간: ",
    "selectWorkspace": "작업 공간 선택",
    "planMode": "컴퓨터 사용",
    "deskContext": "책상 컨텍스트 포함",
    "pastedImage": "붙여넣은 이미지",
    "attachFiles": "파일 추가",
    "commandMenu": "명령 메뉴",
    "docContext": "문서 포함",
    "thinkingLevel": {
      "off": "끔",
      "auto": "자동",
      "high": "깊은",
      "xhigh": "최대"
    },
    "thinkingDesc": {
      "off": "추론 없음",
      "auto": "모델이 깊이를 결정",
      "high": "깊은 추론",
      "xhigh": "전체 추론"
    },
    "contextWindow": "컨텍스트 {windowK}k",
    "tokensUsed": "사용 {tokensK}k ({pct}%)"
  },
  "slash": {
    "diary": "오늘의 일기 쓰기",
    "diaryBusy": "일기 작성 중...",
    "diaryDone": "일기가 diary 폴더에 저장되었습니다",
    "diaryFailed": "일기 작성 실패",
    "xing": "대화에서 스킬 만들기",
    "compact": "컨텍스트 압축",
    "compactBusy": "압축 중...",
    "stop": "현재 응답 중지",
    "new": "새 세션 시작 (기록 보관)",
    "reset": "세션 초기화 (기록 삭제)"
  },
  "welcome": {
    "messages": [
      "무엇이 필요하세요? {name}에게 맡겨 주세요",
      "오늘 무슨 생각을 하고 있어요?",
      "{name}은(는) 늘 여기 있어요",
      "도움이 필요한 게 있나요?",
      "떠오르는 대로 편하게 말해 주세요."
    ],
    "memoryOn": "기억",
    "memoryOff": "이 대화에서는 기억을 사용하지 않아요",
    "agentSelector": "에이전트 선택"
  },
  "drop": {
    "hint": "파일을 놓으면 {name}에게 보낼 수 있어요"
  },
  "attach": {
    "folder": "폴더",
    "copy": "복사",
    "copied": "복사됨 ✓"
  },
  "cron": {
    "typeAt": "1회",
    "typeEvery": "반복",
    "typeCron": "예약",
    "confirm": {
      "approve": "확인",
      "reject": "취소",
      "created": "✓ 생성됨",
      "rejected": "취소됨"
    },
    "everyHours": "{n}시간마다",
    "everyMinutes": "{n}분마다",
    "hourly": "매시간",
    "dailyAt": "매일 {hour}:{min}",
    "weeklyAt": "{days} {hour}:{min}",
    "dayNames": [
      "일",
      "월",
      "화",
      "수",
      "목",
      "금",
      "토"
    ],
    "weekPrefix": ""
  },
  "mood": {
    "label": "✿ MOOD"
  },
  "xing": {
    "title": "반성",
    "thinking": "{name}이(가) 생각하는 중"
  },
  "yuan": {
    "types": {
      "hanako": {
        "label": "균형 잡힌 어시스턴트",
        "avatar": "Hanako.png"
      },
      "butter": {
        "label": "더 풍부한 감성",
        "avatar": "Butter.png"
      },
      "ming": {
        "label": "더 믿음직한 성격",
        "avatar": "Ming.png"
      },
      "kong": {
        "label": "기본형",
        "avatar": "Kong.png"
      }
    },
    "title": "元",
    "splash": {
      "butter": [
        "{name}이(가) 어제 다 못 읽은 페이지를 넘겼어요",
        "아직 못 한 말이 있어요, {name}은(는) 기억하고 있어요",
        "{name}이(가) 낮잠을 자고 있어요",
        "잊기엔 너무 소중한 기억을 맞춰보고 있어요",
        "{name}이(가) 마지막 기분을 조심스럽게 접어 두었어요",
        "혀끝에 맴도는 말이 한참 되었어요",
        "일어나자마자 당신이 뭘 하고 있는지 궁금했어요",
        "줄임표 속에 다 못 한 이야기가 숨어 있어요",
        "{name}이(가) 하고 싶은 말을 아주 작은 쪽지에 접고 있어요",
        "오늘 구름이 그날 당신이 찍은 사진이랑 똑같아요"
      ],
      "ming": [
        "{name}이(가) 초안 여백에 참조선을 그었어요",
        "오래된 질문은 가라앉고, 새로운 아이디어가 떠오르고 있어요",
        "어제의 단서를 한 번 더 살펴보았어요",
        "{name}은(는) 그 공식의 유도가 아름다웠다고 생각해요",
        "어떤 답은 시간이 필요해요",
        "{name}이(가) 업무 최적화 방법을 고민하고 있어요",
        "{name}이(가) 모든 걸 정리된 상태로 유지하려 하고 있어요",
        "지난번 결론을 다시 한번 검증했어요",
        "{name}은(는) 그날 당신의 추론이 날카로웠다고 생각해요",
        "{name}이(가) 커피가 식기를 기다리며 생각을 정리했어요"
      ]
    },
    "welcome": {
      "butter": [
        "안녕~",
        "나를 찾아왔어요?",
        "오늘 하루 어때요?",
        "{name}이(가) 여기서 기다리고 있었어요",
        "{name}이(가) 방금 당신에게 할 말이 있었어요"
      ],
      "ming": [
        "안녕하세요. 준비되면 말씀하세요.",
        "{name} 준비됐어요",
        "무엇을 처리할까요?",
        "말씀하세요, {name}이(가) 듣고 있어요"
      ]
    },
    "placeholder": {
      "butter": "생각나는 대로 말해 주세요...",
      "ming": "말씀하세요..."
    }
  },
  "thinking": {
    "phrases": [
      "생각하는 중",
      "혼잣말 중",
      "표현을 고르는 중",
      "머릿속이 돌아가는 중",
      "생각을 모으는 중",
      "영감을 끓이는 중",
      "기억을 뒤지는 중",
      "무언가 떠올랐어요",
      "아이디어가 솟아나는 중",
      "당신의 말을 소화하는 중",
      "머릿속으로 초안 작성 중",
      "생각의 실을 엮는 중"
    ],
    "butter": [
      "당신의 말을 조심스럽게 헤아리는 중",
      "당신의 감정을 천천히 풀어보는 중",
      "가장 부드러운 표현을 찾는 중",
      "마음속에서 말들이 줄을 서고 있어요",
      "생각을 곱게 접는 중",
      "조용히 곱씹는 중",
      "기억 속에서 무언가를 찾고 있어요",
      "안아줄 만한 답장을 만드는 중",
      "어떤 감정은 풀어내는 데 시간이 걸려요",
      "당신의 말을 위한 포근한 자리를 만드는 중"
    ],
    "ming": [
      "분석 중",
      "시나리오 검토 중",
      "사실 확인 중",
      "생각 정리 중",
      "논리를 따라가는 중",
      "머릿속으로 개요 작성 중",
      "관련 정보 검색 중",
      "검증 중",
      "문제를 분해하는 중",
      "종합하는 중"
    ],
    "done": "생각 완료",
    "active": "생각하는 중"
  },
  "toolGroup": {
    "success": "✿ {name} 다 끝났어요, 식은 죽 먹기 ~ · {n}단계",
    "failed": "⚠ 뭔가 이상한 것 같아요 · {n}단계",
    "countWithFail": "{total}개 도구 ({fail}개 실패)",
    "count": "{n}개 도구",
    "running": "{n}개 도구 실행 중"
  },
  "tool": {
    "web_search": {
      "running": "🌐 {name}이(가) 인터넷 서핑 중이에요",
      "done": "🌐 {name} 서핑 다녀왔어요",
      "failed": "🌐 {name} 파도를 못 탔어요"
    },
    "web_fetch": {
      "running": "📄 {name}이(가) 웹페이지를 보고 있어요",
      "done": "📄 {name} 다 파악했어요",
      "failed": "📄 {name} 인터넷 연결 실패"
    },
    "search_memory": {
      "running": "💭 {name}이(가) 기억을 떠올리는 중이에요",
      "done": "💭 {name} 떠올랐어요!",
      "failed": "💭 {name} 아무리 해도 기억이 안 나요"
    },
    "bash": {
      "running": "💻 {name}이(가) 컴퓨터를 살금살금 만지고 있어요",
      "done": "💻 {name} 컴퓨터 다 썼어요",
      "failed": "💻 {name} 컴퓨터가 말을 안 들어요"
    },
    "read": {
      "running": "📖 {name}이(가) 파일을 넘겨보고 있어요",
      "done": "📖 {name} 다 봤어요",
      "failed": "📖 {name} 못 찾았어요"
    },
    "write": {
      "running": "✏️ {name}이(가) 글을 쓰고 있어요",
      "done": "✏️ {name} 다 적었어요",
      "failed": "✏️ {name} 펜에 잉크가 없어요"
    },
    "edit": {
      "running": "✏️ {name}이(가) 고치고 있어요",
      "done": "✏️ {name} 고쳤어요",
      "failed": "✏️ {name} 고치다가 더 꼬였어요"
    },
    "edit-diff": {
      "running": "✏️ {name}이(가) 고치고 있어요",
      "done": "✏️ {name} 고쳤어요",
      "failed": "✏️ {name} 고치다가 더 꼬였어요"
    },
    "glob": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "grep": {
      "running": "🔍 {name}이(가) 파일 속을 뒤지고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 다 뒤져도 없어요"
    },
    "find": {
      "running": "🔍 {name}이(가) 파일을 찾고 있어요",
      "done": "🔍 {name} 찾았어요",
      "failed": "🔍 {name} 샅샅이 뒤져도 못 찾았어요"
    },
    "ls": {
      "running": "📂 {name}이(가) 폴더 안에 뭐가 있는지 보고 있어요",
      "done": "📂 {name} 다 봤어요",
      "failed": "📂 {name} 이 폴더를 열 수 없어요"
    },
    "truncate": {
      "running": "✂️ {name}이(가) 파일을 정리하고 있어요",
      "done": "✂️ {name} 깔끔해졌어요",
      "failed": "✂️ {name} 정리가 안 돼요"
    },
    "stage_files": {
      "running": "📎 {name}이(가) 파일을 준비하고 있어요",
      "done": "📎 여기요!",
      "failed": "📎 파일을 건네지 못했어요"
    },
    "browser": {
      "running": "🌐 {name}이(가) 브라우저를 쓰고 있어요",
      "done": "🌐 {name} 브라우저 작업 끝났어요",
      "failed": "🌐 {name} 브라우저가 말을 안 들어요"
    },
    "subagent": {
      "running": "🧭 {name} 분신이 조사 중",
      "done": "🧭 분신을 보냈어요",
      "failed": "🧭 분신이 문제가 생겼어요"
    },
    "check_pending_tasks": {
      "running": "📋 {name}이(가) 안 끝난 일을 찾고 있어요",
      "done": "📋 {name} 확인 끝",
      "failed": "📋 확인할 수 없었어요"
    },
    "cron": {
      "running": "⏰ {name}이(가) 예약 작업을 설정하고 있어요",
      "done": "⏰ 설정 완료",
      "failed": "⏰ 설정 못 했어요"
    },
    "notify": {
      "running": "🔔 {name}이(가) 알림을 보내고 있어요",
      "done": "🔔 알림 보냈어요",
      "failed": "🔔 알림을 보내지 못했어요"
    },
    "artifact": {
      "running": "🖼️ {name}이(가) 낙서 중이에요",
      "done": "🖼️ 완성!",
      "failed": "🖼️ 그리다가 실패했어요"
    },
    "dm": {
      "running": "✉️ {name}이(가) 핸드폰을 들었어요",
      "done": "✉️ 보냈어요",
      "failed": "✉️ 보내지 못했어요"
    },
    "channel": {
      "running": "📢 {name}이(가) 채널에 글을 올리고 있어요",
      "done": "📢 올렸어요",
      "failed": "📢 올리지 못했어요"
    },
    "install_skill": {
      "running": "📥 {name}이(가) 스킬을 설치 중이에요",
      "done": "📥 설치 완료",
      "failed": "📥 설치 못 했어요"
    },
    "update_settings": {
      "running": "⚙️ {name}이(가) 설정을 바꾸고 있어요",
      "done": "⚙️ 변경 완료",
      "failed": "⚙️ 변경 못 했어요"
    },
    "_fallback": {
      "running": "🔧 {name}이(가) 열심히 작업 중이에요…",
      "done": "🔧 {name} 끝났어요",
      "failed": "🔧 {name} 뭔가 잘 안 됐어요"
    }
  },
  "file_output": {
    "open": "열기",
    "copied": "경로 복사됨"
  },
  "model": {
    "unknown": "알 수 없는 모델",
    "offline": "오프라인",
    "switchFailed": "모델 전환 실패"
  },
  "splash": {
    "lines": [
      "{name}은(는) 저녁 노을을 기억해요",
      "기억 속에서 어떤 말이 싹을 틔웠어요",
      "추억 속에서 당신의 그림자를 발견했어요",
      "오래된 대화 사이로 바람이 지나갔어요",
      "시간에 절여진 말들이 부드러워졌어요",
      "{name}은(는) 그날 당신이 웃던 걸 기억해요",
      "당신이 접어둔 기억 한 페이지가 있어요",
      "흩어진 감정들을 모아보았어요",
      "{name}은(는) 어느 오후의 귤 향기를 맡았어요",
      "그 대화들에는 아직 온기가 남아 있어요"
    ]
  },
  "settings": {
    "title": "설정",
    "back": "뒤로",
    "save": "저장",
    "saved": "저장됨 ✿",
    "saveFailed": "저장 실패",
    "noChanges": "저장할 내용이 없어요",
    "autoSaved": "자동 저장됨 ✿",
    "tabs": {
      "interface": "인터페이스",
      "agent": "에이전트",
      "me": "나",
      "providers": "제공자",
      "models": "모델",
      "memory": "기억",
      "work": "워크스페이스",
      "skills": "스킬",
      "bridge": "소셜",
      "sharing": "공유",
      "plugins": "플러그인",
      "about": "소개",
      "security": "보안"
    },
    "appearance": {
      "title": "외관",
      "theme": "테마",
      "warmPaper": "따뜻한 종이",
      "warmPaperMode": "라이트",
      "midnight": "아오이 밤",
      "midnightMode": "다크",
      "highContrast": "깨끗한 흰색",
      "highContrastMode": "고대비",
      "grassAroma": "풀 향기",
      "grassAromaMode": "Butter",
      "contemplation": "사색",
      "contemplationMode": "Ming",
      "absolutely": "Absolutely",
      "absolutelyMode": "어디서 본 듯한",
      "delve": "Delve",
      "delveMode": "탐험해 봐요",
      "deepThink": "Deep Think",
      "deepThinkMode": "작은 고래",
      "claudeDesign": "새 따뜻한 종이",
      "claudeDesignMode": "실험",
      "auto": "자동",
      "autoMode": "시스템",
      "serifFont": "명조 글꼴",
      "serifFontHint": "본문에 명조 글꼴을 사용해요",
      "paperTexture": "종이 질감",
      "paperTextureHint": "배경에 한지 질감을 추가해요",
      "leavesOverlay": "맑은 날 모드",
      "leavesOverlayHint": "가끔은 햇볕도 쬐어요"
    },
    "locale": {
      "title": "언어 및 지역",
      "language": "언어",
      "languageHint": "전환 후 페이지가 새로고침돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프, 일기 항목 등에 사용돼요"
    },
    "agent": {
      "title": "에이전트",
      "changeAvatar": "변경",
      "removeAvatar": "아바타 제거",
      "avatarRemoved": "기본 아바타로 복원됨",
      "agentNameHint": "불리는 이름",
      "identity": "정체성",
      "identityHint": "이 에이전트가 누구이고 무엇을 잘하는지 짧게 설명해 주세요. 다른 에이전트가 이를 참고해요",
      "ishiki": "의식",
      "ishikiHint": "어시스턴트의 성격, 어조, 행동을 정의해요. 이름은 자동으로 주입돼요",
      "publicIshiki": "공개 의식",
      "publicIshikiHint": "개인정보 보호를 위해, 방문자와 대화할 때 어시스턴트는 기억, 개인 정보, 컴퓨터의 파일과 도구에 접근할 수 없어요.\n방문자 대화에서의 답변 스타일과 가이드라인을 여기서 설정할 수 있어요.",
      "chatModel": "모델",
      "chatModelHint": "대화와 작업에 사용하는 모델",
      "addAgent": "새 에이전트",
      "createTitle": "새 에이전트",
      "namePlaceholder": "이름을 지어주세요",
      "cancel": "취소",
      "confirm": "만들기",
      "creating": "생성 중…",
      "nameRequired": "이름을 입력해 주세요",
      "created": "{name} 생성 완료 ✿",
      "createFailed": "생성 실패",
      "switched": "{name}(으)로 전환됨 ✿",
      "switchFailed": "전환 실패",
      "deleteBtn": "에이전트 삭제",
      "deleteTitle1": "{name}을(를) 삭제할까요?",
      "deleteDesc1": "모든 설정, 기억, 대화가 영구적으로 삭제돼요. 이 작업은 되돌릴 수 없어요.",
      "deleteNext": "계속",
      "deleteTitle2": "확인하려면 \"{name}\"을(를) 입력해 주세요",
      "deletePlaceholder": "에이전트 이름 입력",
      "deleteConfirm": "영구 삭제",
      "deleteCancel": "취소",
      "deleted": "{name} 삭제됨",
      "deleteFailed": "삭제 실패",
      "setActive": "활성 에이전트로 설정",
      "lastAgent": "에이전트는 최소 한 명 유지해야 해요",
      "yuan": "元",
      "yuanHint": "「元」은 에이전트의 타고난 사고 방식이에요. 이 기반 위에 당신만의 동반자를 만들어 보세요.",
      "tools": {
        "title": "도구",
        "description": "변경 사항은 새 세션에만 적용돼요. 진행 중인 세션은 시작할 때의 도구 집합을 계속 사용해요.",
        "items": {
          "browser": { "label": "브라우저", "summary": "헤드리스 브라우저로 웹 페이지를 탐색" },
          "cron": { "label": "예약 작업", "summary": "지정한 시간에 작업을 자동 실행" },
          "dm": { "label": "다이렉트 메시지", "summary": "다른 에이전트에게 1대1 메시지 전송" },
          "install_skill": { "label": "스킬 설치", "summary": "GitHub 또는 스킬 라이브러리에서 새 스킬 설치" },
          "update_settings": { "label": "설정 변경", "summary": "Agent가 앱 설정을 수정할 수 있도록 허용" }
        }
      }
    },
    "about": {
      "title": "소개",
      "tagline": "당신의 컴퓨터에 사는, 기억력 좋은 어시스턴트.",
      "license": "라이선스",
      "copyright": "저작권",
      "licenseToggle": "라이선스 전문",
      "updateAvailable": "새 버전 출시: v{version}",
      "updateDownload": "다운로드",
      "updateChecking": "업데이트 확인 중…",
      "updateDownloading": "{agentName}이(가) 새 집을 준비하는 중 {percent}%",
      "updateReadyInstall": "v{version} 설치 준비 완료",
      "updateInstall": "재시작하여 업데이트",
      "updateProgress": "{percent}%",
      "updateError": "업데이트 확인 실패",
      "updateLatest": "최신 버전입니다",
      "updateCheckBtn": "업데이트 확인",
      "updateNeedInstall": "먼저 Hanako를 응용 프로그램 폴더로 이동하세요",
      "updateDiskSpace": "디스크 공간이 부족하여 업데이트를 다운로드할 수 없습니다",
      "betaUpdates": "베타 업데이트 수신"
    },
    "security": {
      "sandbox": "샌드박스",
      "sandboxDesc": "AI의 파일 시스템 접근을 작업 디렉토리와 필수 데이터 폴더로 제한합니다",
      "sandboxWarning": "샌드박스를 비활성화하면 AI가 시스템의 모든 파일에 접근할 수 있어 예상치 못한 결과가 발생할 수 있습니다",
      "fileBackup": "파일 백업",
      "fileBackupDesc": "AI가 파일을 수정하거나 삭제하기 전에 원본 내용을 자동으로 저장합니다",
      "retention": "보존 기간",
      "retention1d": "1일",
      "retention3d": "3일",
      "retention7d": "7일",
      "maxFileSize": "다음 크기 이상 무시",
      "viewBackups": "백업 보기",
      "hideBackups": "닫기",
      "restoreBtn": "복원",
      "noBackups": "아직 백업이 없습니다",
      "restoreSuccess": "복원됨",
      "restoreFailed": "복원 실패"
    },
    "me": {
      "title": "나",
      "changeAvatar": "변경",
      "userNameHint": "어시스턴트가 부르는 이름",
      "userProfile": "사용자 프로필",
      "userProfileHint": "어시스턴트가 당신을 이해하는 데 도움이 돼요: 관심사, 습관, 취향 등. 시스템 프롬프트에 주입돼요"
    },
    "crop": {
      "title": "아바타 조정",
      "hint": "드래그해서 이동, 스크롤해서 확대/축소",
      "cancel": "취소",
      "confirm": "확인",
      "updated": "아바타 업데이트됨 ✿",
      "reset": "아바타가 기본값으로 복원됨"
    },
    "providers": {
      "title": "등록된 Provider",
      "addTitle": "Provider 추가",
      "name": "Provider",
      "customName": "이름",
      "customUrl": "Base URL",
      "apiFormat": "API 프로토콜",
      "url": "Base URL",
      "apiKey": "API Key",
      "addBtn": "추가",
      "empty": "아직 등록된 Provider가 없어요",
      "fetchModels": "모델 가져오기",
      "delete": "Provider 삭제",
      "modelCount": "{n}개 모델",
      "fetchSuccess": "{name}에서 {n}개 모델을 가져왔어요",
      "fetchFailed": "가져오기 실패",
      "nameRequired": "Provider 이름을 입력해 주세요",
      "urlRequired": "Base URL을 입력해 주세요",
      "apiRequired": "API 프로토콜을 선택해 주세요",
      "added": "{name} 추가됨",
      "deleted": "{name} 삭제됨",
      "noModels": "아직 모델이 없어요",
      "resetModels": "모델 초기화",
      "apiType": "API 유형",
      "verify": "확인",
      "verifyConnection": "연결 확인",
      "verifySuccess": "연결 확인됨",
      "verifyFailed": "확인 실패",
      "setupHint": "API Key를 입력해서 이 Provider를 활성화하세요",
      "selectHint": "Provider를 선택하면 상세 정보를 볼 수 있어요",
      "addCustom": "커스텀 Provider 추가",
      "noKey": "미설정",
      "remove": "제거",
      "deleteConfirm": "Provider {name}을(를) 삭제할까요? 연결된 모델도 함께 제거돼요."
    },
    "oauth": {
      "title": "간편 로그인",
      "login": "로그인",
      "logout": "로그아웃",
      "loggedIn": "로그인됨",
      "codePlaceholder": "인증 코드를 붙여넣으세요",
      "submit": "제출",
      "success": "로그인 성공",
      "loggedOut": "로그아웃됨",
      "failed": "로그인 실패",
      "deviceHint": "브라우저에서 이 코드를 입력해서 인증해 주세요",
      "waiting": "인증 대기 중…",
      "clickToCopy": "클릭하여 복사",
      "codeCopied": "코드 복사됨",
      "addModel": "모델 추가",
      "customModelPlaceholder": "모델 ID를 입력하세요"
    },
    "api": {
      "title": "모델 & API",
      "mainApi": "메인 API",
      "provider": "Provider",
      "baseUrl": "Base URL",
      "baseUrlHint": "Base URL을 직접 입력해 주세요",
      "apiKey": "API Key",
      "apiKeyPlaceholder": "새 키를 입력하면 업데이트돼요",
      "utilityApi": "유틸리티 모델 API",
      "utilityApiHint": "별도로 설정할 경우, Provider, Base URL, API Key를 모두 명시해야 해요",
      "showKey": "보기",
      "hideKey": "숨기기",
      "selectModel": "모델 선택",
      "customModel": "직접 입력...",
      "mainModelSection": "모델",
      "mainModelHint": "이 모델들이 채팅 페이지에서 사용할 수 있어요",
      "addModel": "모델 추가",
      "defaultModel": "기본값",
      "removeModel": "제거",
      "noModels": "아직 추가된 모델이 없어요",
      "otherModelSection": "기타",
      "chatModel": "기본 모델",
      "utilityModel": "유틸리티 (소형)",
      "utilityModelHint": "제목, 간단한 분류 등. 저렴한 소형 모델을 추천해요",
      "utilityLargeModel": "유틸리티 (대형)",
      "utilityLargeModelHint": "활동 요약, 작업 분해 등. 비어 있으면 소형 유틸리티로 대체해요",
      "visionModel": "보조 시각 모델",
      "visionModelHint": "현재 채팅 모델이 이미지를 받을 수 없을 때만 먼저 이미지를 읽고 간단한 설명을 전달해요",
      "searchProvider": "검색 서비스",
      "searchProviderField": "검색 엔진",
      "searchApiKey": "검색 API Key",
      "searchApiKeyHint": "선택한 검색 Provider의 API Key를 입력해 주세요",
      "favorites": "즐겨찾기",
      "searchModel": "모델 검색...",
      "noFavorites": "☆를 클릭해서 모델을 즐겨찾기에 추가하세요",
      "customInput": "직접 입력...",
      "editModel": "편집",
      "contextLength": "컨텍스트 길이",
      "contextShort": "컨텍스트",
      "maxOutput": "최대 출력",
      "outputLength": "출력 길이",
      "modelName": "모델",
      "output": "출력",
      "save": "저장",
      "cancel": "취소",
      "thinkingLevel": "추론 수준",
      "thinkingLevelHint": "추론 깊이를 조절해요. 추론을 지원하는 모델에만 적용돼요",
      "thinkingLevels": {
        "off": "끔",
        "low": "낮음",
        "medium": "보통",
        "high": "높음",
        "auto": "자동",
        "xhigh": "최대"
      },
      "addedModels": "추가된 모델",
      "displayName": "표시 이름",
      "vision": "비전",
      "reasoning": "추론"
    },
    "memory": {
      "sectionTitle": "기억",
      "title": "기억 시스템",
      "needsUtilityModel": "먼저 모델 탭에서 유틸리티 모델을 설정해 주세요",
      "compiled": "현재 기억",
      "compiledHint": "어시스턴트가 당신에 대해 기억하는 것들 — 중요하고 최근의 것들",
      "compiledView": "현재 기억 보기",
      "compiledEmpty": "아직 정리된 기억이 없어요",
      "compiledClear": "초기화",
      "compiledCleared": "정리된 기억이 초기화됨",
      "allMemories": "모든 기억",
      "tokenBudget": "기억 용량",
      "tokenBudgetHint": "memory.md의 목표 token 예산",
      "decayPerDay": "감쇠 계수",
      "decayPerDayHint": "가우시안 감쇠의 기본 λ 값",
      "hitBonus": "참조 보너스",
      "hitBonusHint": "기억이 참조될 때마다 추가되는 점수",
      "baseImportance": "기본 중요도",
      "baseImportanceHint": "새 기억의 기본 초기 점수",
      "forgetSpeed": "망각 속도",
      "forgetSpeedHint": "1.0 = 보통, 2.0 = 두 배 빠르게",
      "compileThreshold": "정리 임계값",
      "compileThresholdHint": "이 점수 미만의 기억은 제외돼요",
      "timezone": "시간대",
      "timezoneHint": "기억 타임스탬프에 사용돼요",
      "actions": {
        "title": "기억 관리",
        "view": "기억 보기",
        "clear": "기억 초기화",
        "more": "더보기",
        "export": "내보내기",
        "import": "가져오기",
        "clearConfirm": "모든 기억을 초기화할까요? 이 작업은 되돌릴 수 없어요.",
        "cancel": "취소",
        "confirmClear": "초기화 확인",
        "viewTitle": "모든 기억",
        "clearSuccess": "기억 초기화됨",
        "exportSuccess": "내보내기 성공",
        "importSuccess": "{count}개 기억 가져옴",
        "importing": "가져오는 중...",
        "empty": "아직 기억이 없어요",
        "invalidFile": "잘못된 기억 파일이에요",
        "activeOnly": "먼저 이 에이전트를 활성 상태로 설정해 주세요"
      },
      "unknownDate": "날짜 불명",
      "threshold": {
        "title": "기억 수위선",
        "hint": "얼마나 많은 기억을 유지할지 정할 수 있어요. 약간의 노이즈는 괜찮아요. LLM은 필터링을 잘 해요.",
        "stats": "{remembered} / {total}개 기억 유지 중"
      },
      "activeOnly": "이 에이전트를 먼저 활성으로 설정해 주세요"
    },
    "pins": {
      "title": "고정 기억",
      "hint": "항상 대화에 주입되며 감쇠하지 않아요",
      "empty": "아직 고정 기억이 없어요",
      "delete": "삭제",
      "addPlaceholder": "고정 기억 추가..."
    },
    "experience": {
      "title": "경험",
      "hint": "에이전트가 배운 교훈을 카테고리별로 정리한 것이에요. 에이전트는 작업을 시작하기 전에 관련 경험을 확인해요",
      "empty": "아직 경험이 없어요",
      "edit": "편집",
      "deleteCategory": "카테고리 삭제"
    },
    "search": {
      "verify": "확인",
      "verifying": "확인 중...",
      "verified": "확인 및 저장됨 ✿",
      "verifyFailed": "확인 실패",
      "noProvider": "먼저 검색 엔진을 선택해 주세요",
      "noKey": "먼저 API Key를 입력해 주세요"
    },
    "work": {
      "title": "순찰",
      "heartbeatMaster": "순찰 마스터 스위치",
      "heartbeatMasterDesc": "끄면 모든 에이전트의 순찰이 일시 중지됩니다",
      "heartbeatEnabled": "순찰 모드",
      "heartbeatOn": "켜짐",
      "heartbeatOff": "꺼짐",
      "heartbeatInterval": "순찰 간격",
      "heartbeatUnit": "분",
      "heartbeatDesc": "어시스턴트가 작업 공간을 자동으로 확인하는 주기",
      "cronAutoApprove": "예약 작업 자동 승인",
      "cronAutoApproveOn": "켜짐",
      "cronAutoApproveOff": "꺼짐",
      "cronAutoApproveDesc": "어시스턴트가 확인 없이 예약 작업을 생성할 수 있도록 허용",
      "homeFolder": "작업 공간",
      "homeFolderDesc": "새 대화, 순찰, 예약 작업의 기본 작업 디렉토리",
      "homeFolderPlaceholder": "미설정 (매번 수동 선택)",
      "homeFolderClear": "지우기",
      "homeFolderBrowse": "찾아보기"
    },
    "toolCaps": {
      "title": "자기 학습 스킬"
    },
    "skills": {
      "title": "스킬",
      "desc": "이 에이전트의 스킬을 켜거나 끌 수 있어요. 활성화하면 에이전트가 대화에서 자동으로 해당 스킬을 인식하고 사용해요.",
      "manageTitle": "Installed Skills",
      "agentConfigTitle": "Agent Skill Configuration",
      "configureFor": "Configuring:",
      "userSkillsTitle": "Agent Skill Toggles",
      "learnedSkillsTitle": "Learned Skills",
      "learnedEmpty": "This agent hasn't learned any skills yet",
      "user": "사용자 스킬",
      "system": "시스템 스킬",
      "add": "스킬 추가",
      "delete": "삭제",
      "deleteConfirm": "스킬 \"{name}\"을(를) 삭제할까요?",
      "installSuccess": "스킬 \"{name}\" 설치됨",
      "installError": "설치 실패",
      "enabled": "활성화됨",
      "disabled": "비활성화됨",
      "noSkills": "사용 가능한 스킬이 없어요",
      "learned": "에이전트가 배운 것",
      "noLearned": "에이전트가 아직 배운 스킬이 없어요",
      "noUser": "사용자 정의 스킬 없음",
      "copyToSkills": "내 스킬로 복사",
      "copied": "복사됨 ✓",
      "copyFailed": "복사 실패",
      "dropzone": "스킬 폴더를 드래그해서 설치하거나 클릭해서 찾아보세요",
      "learnHint": "어시스턴트에게 물어보세요: GitHub에서 안전하고 유용한 스킬을 찾아줘",
      "reloaded": "스킬 다시 로드됨",
      "reload": "스킬 새로고침",
      "compatTitle": "호환 스킬",
      "compatDesc": "다른 AI 도구가 설치한 스킬을 자동으로 발견해요",
      "compatNoSkills": "외부 스킬을 찾지 못했어요",
      "compatAddPath": "디렉토리 추가",
      "compatRemove": "제거",
      "compatAutoDiscovered": "자동 발견됨",
      "compatNotInstalled": "미설치",
      "learnCreate": "스킬 생성 / 설치",
      "learnCreateDesc": "에이전트가 새 스킬을 작성하거나 도구 호출로 설치하는 것을 허용해요",
      "fetchRemote": "GitHub / ClawHub에서 스킬 가져오기",
      "fetchRemoteDesc": "활성화하면 에이전트가 전문 작업 수행 시 적합한 스킬을 검색하고 설치해요. 주의해서 사용하세요",
      "safetyReview": "설치 전 안전 검토",
      "safetyReviewDesc": "스킬 설치 전 AI로 프롬프트 인젝션 등 보안 위험을 감지해요",
      "fetchWarning": {
        "title": "원격 스킬 가져오기 정보",
        "body1": "활성화하면 에이전트가 전문 작업 수행 시 GitHub과 ClawHub에서 스킬을 검색, 다운로드, 설치해요.",
        "body2": "설치 전 자동 안전 검토와 스타 수 확인이 수행되지만, 다음 위험이 남아 있어요:",
        "risk1": "스킬 내용이 사람에 의해 검토되지 않아 부적절한 지시가 포함될 수 있어요",
        "risk2": "에이전트가 기대와 다른 스킬을 설치할 수 있어요",
        "risk3": "악성 스킬이 에이전트 행동을 조작하려 할 수 있어요",
        "confirm": "위험을 이해했어요, 활성화"
      },
      "safetyWarning": {
        "title": "안전 검토 비활성화",
        "body1": "안전 검토는 스킬 설치 전 잠재적으로 악성인 콘텐츠를 감지해요:",
        "risk1": "프롬프트 인젝션 (무단 지시)",
        "risk2": "지나치게 광범위한 트리거 조건",
        "risk3": "소셜 엔지니어링 및 권한 상승 시도",
        "body2": "비활성화하면 모든 스킬이 검토 없이 설치돼요.",
        "confirm": "위험을 이해했어요, 검토 비활성화"
      }
    },
    "plugins": {
      "title": "플러그인",
      "desc": "커뮤니티 플러그인을 관리합니다.",
      "empty": "플러그인이 없습니다",
      "reload": "새로고침",
      "statusLoaded": "로드됨",
      "statusFailed": "실패",
      "statusDisabled": "비활성화",
      "fullAccessToggle": "전체 권한 플러그인 허용",
      "fullAccessDesc": "활성화하면 full-access를 선언한 플러그인이 시스템 수준 API(라우트, 훅, Provider 등)를 사용할 수 있어요",
      "dropzone": "플러그인 폴더 또는 .zip을 여기에 끌어다 설치하거나 클릭하여 선택",
      "statusRestricted": "전체 권한 필요",
      "deleteConfirm": "플러그인 \"{name}\"을 제거할까요? 플러그인 데이터는 보존됩니다.",
      "installSuccess": "플러그인 \"{name}\" 설치 완료",
      "installError": "플러그인 설치 실패",
      "invalidPlugin": "유효한 플러그인 디렉토리가 아닙니다",
      "pluginsDir": "플러그인 디렉토리: {path}",
      "needsFullAccess": "이 플러그인을 사용하려면 「전체 권한 플러그인 허용」을 먼저 활성화하세요"
    },
    "screenshot": {
      "title": "스크린샷 공유",
      "color": "색상",
      "width": "너비",
      "light": "라이트",
      "dark": "다크",
      "sakura": "푸른 하늘과 벚꽃",
      "mobile": "모바일",
      "desktop": "데스크톱"
    },
    "bridge": {
      "agent": "Agent",
      "telegram": "Telegram",
      "telegramToken": "Bot Token",
      "telegramHint": "@BotFather에서 받으세요",
      "feishu": "Feishu",
      "feishuAppId": "App ID",
      "feishuAppSecret": "App Secret",
      "feishuHint": "Feishu 오픈 플랫폼에서 받으세요",
      "qq": "QQ",
      "qqAppId": "App ID",
      "qqAppSecret": "App Secret",
      "qqHint": "QQ 봇 오픈 플랫폼(q.qq.com/qqbot)에서 받으세요",
      "connected": "연결됨",
      "disconnected": "연결 안 됨",
      "error": "연결 실패",
      "test": "연결 테스트",
      "testOk": "연결 성공",
      "testFail": "테스트 실패",
      "noToken": "먼저 Bot Token을 입력해 주세요",
      "noCredentials": "먼저 App ID와 App Secret을 입력해 주세요",
      "globalSettings": "전역 설정",
      "agentSettings": "에이전트",
      "receiptEnabled": "응답 전 안내",
      "receiptEnabledDesc": "메시지를 받으면 실제 답변 전에 '받았고 답변 중'이라는 짧은 안내를 먼저 보냅니다",
      "readOnly": "읽기 전용 모드",
      "readOnlyDesc": "브릿지 봇은 파일만 읽을 수 있고, 쓰기나 명령 실행은 불가능해요",
      "howTo": "설정 가이드",
      "tutorialTitle": "플랫폼 설정 가이드",
      "tutorialTgSteps": [
        "Telegram에서 <code>@BotFather</code>를 검색하고 대화를 열어 주세요",
        "<code>/newbot</code>을 보내고 안내에 따라 이름과 사용자명을 설정해 주세요",
        "BotFather가 Bot Token을 보내줄 거예요 (예: <code>123456:ABC-DEF...</code>)",
        "위 입력란에 Token을 붙여넣고 스위치를 켜주세요",
        "Telegram에서 내 봇을 찾아서 메시지를 보내 테스트해 보세요"
      ],
      "ownerSelect": "어떤 계정이 본인인가요",
      "ownerWarning": "경고: 선택한 계정은 컴퓨터, 기억, 개인 정보에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerNone": "먼저 메시지를 보내야 선택할 수 있어요",
      "ownerSaved": "저장됨",
      "ownerConfirmTitle": "소유자로 설정할까요?",
      "ownerConfirmText": "소유자는 기억, 도구, 성격을 포함한 에이전트의 모든 기능에 접근할 수 있어요. 본인의 계정인지 확인해 주세요.",
      "ownerConfirmCancel": "취소",
      "ownerConfirmSave": "확인",
      "tutorialFsSteps": [
        "<code>open.feishu.cn</code>에 접속해서 로그인 후 개발자 콘솔을 열어 주세요",
        "\"기업 자체 앱 만들기\"를 클릭하고 앱 이름과 설명을 입력해 주세요",
        "\"인증 및 기본 정보\" 페이지에서 <code>App ID</code>와 <code>App Secret</code>을 복사해 주세요",
        "왼쪽 메뉴에서 \"앱 기능 추가\"를 찾아 \"봇\" 기능을 추가하고 이름을 지어주세요",
        "\"권한\"에서 <code>im:message</code>를 검색하고 활성화해 주세요 (메시지 수발신)",
        "\"이벤트 및 콜백\" → \"이벤트 설정\"에서 \"롱 커넥션으로 이벤트 수신\"으로 변경해 주세요",
        "\"이벤트 추가\"를 클릭하고 <code>im.message.receive_v1</code>을 추가해 주세요 (메시지 수신)",
        "중요: \"버전 관리\"에서 버전을 생성하고 게시해 주세요 (롱 커넥션 설정에는 게시된 앱이 필요해요)",
        "위 입력란에 App ID와 App Secret을 붙여넣고 스위치를 켜주세요"
      ],
      "whatsappHint": "곧 지원 예정"
    }
  },
  "onboarding": {
    "welcome": {
      "title": "안녕하세요, 저는 {name}이에요 ✿",
      "subtitle": "저는 당신의 개인 AI 어시스턴트예요.\n간단한 설정을 하고 시작해 볼까요.",
      "next": "시작하기"
    },
    "name": {
      "title": "어떻게 부르면 될까요?",
      "subtitle": "대화가 더 자연스러워져요",
      "placeholder": "이름을 입력해 주세요",
      "back": "뒤로",
      "next": "다음"
    },
    "provider": {
      "title": "AI Provider를 선택해 주세요",
      "subtitle": "작동하려면 AI 모델 Provider가 필요해요.\nProvider를 선택하고 API Key를 입력해 주세요.",
      "custom": "직접 입력...",
      "customName": "이름",
      "customNamePlaceholder": "예: my-provider",
      "customUrl": "API URL",
      "customUrlPlaceholder": "예: https://api.example.com/v1",
      "keyLabel": "API Key",
      "keyPlaceholder": "API Key를 붙여넣으세요",
      "test": "연결 테스트",
      "testing": "연결 중...",
      "testSuccess": "연결됨 ✿",
      "testFailed": "연결 실패",
      "back": "뒤로",
      "next": "다음"
    },
    "model": {
      "title": "대화 모델을 선택해 주세요",
      "subtitle": "주로 사용할 모델이에요. 똑똑하고 유능한 걸 골라주세요.",
      "loading": "모델을 가져오는 중...",
      "searchPlaceholder": "모델 검색...",
      "empty": "모델을 찾지 못했어요",
      "utility": "유틸리티 모델",
      "utilityHint": "요약, 핵심 추출 등. 빠르고 저렴한 모델을 추천해요",
      "utilityLarge": "유틸리티 대형",
      "utilityLargeHint": "기억 정리, 심층 분석 등. 유능한 모델을 추천해요",
      "back": "뒤로",
      "next": "다음"
    },
    "theme": {
      "title": "테마를 선택해 주세요",
      "subtitle": "나중에 설정에서 언제든 바꿀 수 있어요",
      "back": "뒤로",
      "next": "다음"
    },
    "tutorial": {
      "title": "준비 완료 ✿",
      "memory": {
        "title": "기억",
        "desc": "대화에서 중요한 내용을 기억해요. 오래되고 덜 참조된 기억은 자연스럽게 흐려져요. 우리의 기억처럼."
      },
      "skills": {
        "title": "스킬",
        "desc": "파일을 읽고 쓰고, 명령을 실행하고, 웹을 검색할 수 있어요. 더 많은 스킬은 설정에서 관리하세요."
      },
      "workspace": {
        "title": "작업 공간",
        "desc": "폴더를 작업 공간으로 설정하면 프로젝트와 파일 관리를 도와줄 수 있어요."
      },
      "jian": {
        "title": "Jian",
        "desc": "아무 폴더에 jian.md를 넣어두면\n순찰할 때 확인하고 자동으로 실행해요."
      },
      "finish": "시작할게요"
    }
  },
  "activity": {
    "title": "활동",
    "empty": "아직 활동이 없어요. 순찰과 예약 작업이 여기에 표시돼요.",
    "back": "뒤로",
    "heartbeat": "정기 순찰",
    "subagent": "서브 에이전트 작업",
    "cron": "예약 작업",
    "patrolDone": "순찰 완료",
    "cronDone": "예약 작업 완료",
    "error": "실행 오류",
    "viewSession": "세션 보기 →",
    "duration": "{text} 소요",
    "promote": "대화로 승격"
  },
  "automation": {
    "title": "예약 작업",
    "empty": "아직 예약 작업이 없어요.\n필요할 때 어시스턴트가 만들어 줄 거예요.",
    "defaultModel": "기본 모델",
    "edit": "편집",
    "delete": "삭제"
  },
  "ctx": {
    "cut": "잘라내기",
    "copy": "복사",
    "paste": "붙여넣기",
    "selectAll": "모두 선택"
  },
  "desk": {
    "title": "책상",
    "skills": "스킬",
    "cwdSkills": "프로젝트 스킬",
    "cwdSkillsEmpty": "이 폴더에는 프로젝트 스킬이 없어요",
    "cwdSkillsHint": ".agents/skills/ 디렉토리를 만들어서 시작하세요",
    "cwdSkillsDesc": "스킬은 작업 공간을 따라가요",
    "cwdSkillsDrop": "폴더나 .zip을 드래그해서 스킬을 설치하세요",
    "deleteSkill": "스킬 삭제",
    "openInFinder": "폴더 열기",
    "jianLabel": "Jian",
    "jianPlaceholder": "이 폴더의 파일을 어떻게 처리할지 어시스턴트에게 알려주세요...",
    "execLogLabel": "실행 기록",
    "execLogDelete": "이 기록 삭제",
    "emptyTitle": "책상이 비어 있어요",
    "emptyHint": "책상은 어시스턴트의 순찰 작업 공간이자 모든 대화의 기본 디렉토리예요.\n설정에서 폴더를 지정하세요.",
    "goToSettings": "설정으로 이동",
    "fileLabel": "파일",
    "openWithDefault": "기본 앱으로 열기",
    "newFolder": "새 폴더",
    "ctx": {
      "open": "열기",
      "openInFinder": "폴더 열기",
      "rename": "이름 변경",
      "copyPath": "경로 복사",
      "delete": "삭제",
      "deleteN": "{n}개 항목 삭제",
      "newMdFile": "새 Markdown 문서",
      "newFolder": "새 폴더"
    },
    "sort": {
      "label": "정렬",
      "mtime": "수정일",
      "nameAsc": "이름 A→Z",
      "nameDesc": "이름 Z→A",
      "size": "파일 크기",
      "type": "파일 유형",
      "mtimeShort": "시간",
      "nameAscShort": "이름↑",
      "nameDescShort": "이름↓",
      "sizeShort": "크기",
      "typeShort": "유형"
    }
  },
  "window": {
    "minimize": "최소화",
    "maximize": "최대화",
    "close": "닫기"
  },
  "browser": {
    "using": "브라우저 사용 중",
    "close": "브라우저 닫기",
    "closeBtn": "닫기",
    "back": "뒤로",
    "forward": "앞으로",
    "reload": "새로고침",
    "emergencyStop": "AI 제어 긴급 중지",
    "backgroundHint": "백그라운드 브라우저 실행 중, 클릭하여 보기",
    "background": "백그라운드 브라우저"
  },
  "bridge": {
    "selectChat": "대화를 선택하세요",
    "noSessions": "아직 대화가 없어요",
    "noMessages": "아직 메시지가 없어요",
    "empty": "메시지 없음",
    "notConfigured": "{platform}이(가) 설정되지 않았어요",
    "goToSettings": "설정으로 이동",
    "resetContext": "컨텍스트 리셋",
    "resetContextTip": "다음 메시지부터 새 대화가 시작돼요"
  },
  "error": {
    "pathsRequired": "paths 배열이 필요해요",
    "tooManyFiles": "파일이 너무 많아요 (최대 {max}개, 현재 {n}개)",
    "pathNotFound": "경로를 찾을 수 없어요",
    "missingParam": "{param} 파라미터가 없어요",
    "invalidJson": "요청 본문은 JSON 객체여야 해요",
    "sessionNotFound": "세션 파일을 찾을 수 없어요",
    "stillStreaming": "{name}이(가) 아직 응답 중이에요. 잠시 기다려 주세요",
    "agentNameEmpty": "어시스턴트 이름을 비워둘 수 없어요",
    "agentIdInvalid": "어시스턴트 ID에 잘못된 문자가 포함되어 있어요",
    "agentAlreadyExists": "어시스턴트 \"{id}\"가 이미 존재해요",
    "agentSwitching": "어시스턴트를 전환 중이에요. 잠시 후 다시 시도해 주세요",
    "agentNotFound": "어시스턴트 \"{id}\"를 찾을 수 없거나 초기화되지 않았어요",
    "agentModelNotAvailable": "agent \"{id}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "agentDeleteActive": "현재 사용 중인 어시스턴트는 삭제할 수 없어요",
    "agentNotExists": "어시스턴트 \"{id}\"가 존재하지 않아요",
    "modelNoResponse": "모델이 아무 내용도 반환하지 않았어요. API 설정과 네트워크 연결을 확인해 주세요.",
    "noActiveSession": "활성 세션이 없어요",
    "compacting": "압축 중이에요",
    "waitForReply": "응답이 완료된 후 압축해 주세요",
    "compactFailed": "압축 실패: {msg}",
    "maxImages": "이미지는 최대 {max}장까지 가능해요",
    "unsupportedImageFormat": "지원하지 않는 이미지 형식: {mime}",
    "imageTooLarge": "이미지 한 장당 20MB를 초과할 수 없어요",
    "viewImage": "(이미지 보기)",
    "modelNoVision": "현재 모델은 이미지를 지원하지 않아요. 이미지를 지원하는 모델로 전환해 주세요",
    "searchProviderNotConfigured": "검색 provider가 설정되지 않았어요",
    "searchProviderMissingKey": "검색 provider \"{provider}\"의 API Key가 없어요",
    "searchProviderUnknown": "알 수 없는 검색 provider: {provider}",
    "searchFailed": "검색 실패: {msg}",
    "searchEmptyQuery": "검색 키워드를 입력해 주세요.",
    "searchNoResults": "관련 결과를 찾지 못했어요. (via {provider})",
    "searchResults": "검색 결과 (via {provider}):\n\n{results}",
    "searchError": "검색 오류: {msg}",
    "fetchEmptyUrl": "가져올 URL을 입력해 주세요.",
    "fetchHttpOnly": "http/https 프로토콜의 URL만 지원해요.",
    "fetchInvalidUrl": "잘못된 URL: {url}",
    "fetchSsrf": "내부 네트워크 주소 접근이 금지되어 있어요: {host}",
    "fetchRedirectLimit": "리다이렉트 횟수 초과 ({max})",
    "fetchHttpError": "가져오기 실패: HTTP {status} {statusText}",
    "fetchTruncated": "\n\n[... 내용이 잘렸어요. 총 {len}자]",
    "fetchSource": "출처: {host}{path} ({format})\n\n",
    "fetchTimeout": "가져오기 타임아웃 ({sec}s): {url}",
    "fetchError": "가져오기 오류: {msg}",
    "browserError": "오류: {msg}",
    "browserAlreadyRunning": "브라우저가 이미 실행 중이에요",
    "browserLaunched": "브라우저를 시작했어요",
    "browserNotRunning": "브라우저가 실행되고 있지 않아요",
    "browserClosed": "브라우저를 닫았어요",
    "browserNavigateNeedUrl": "navigate에는 url 파라미터가 필요해요",
    "browserNavigated": "{title}(으)로 이동했어요\nURL: {url}\n\n{snapshot}",
    "browserClickNeedRef": "click에는 ref 파라미터가 필요해요",
    "browserClicked": "[{ref}]을(를) 클릭했어요\n\n{snapshot}",
    "browserTypeNeedText": "type에는 text 파라미터가 필요해요",
    "browserTyped": "텍스트를 입력했어요{target}\n\n{snapshot}",
    "browserScrollNeedDir": "scroll에는 direction 파라미터가 필요해요 (up/down)",
    "browserScrolled": "{dir}(으)로 스크롤했어요\n\n{snapshot}",
    "browserSelectNeedRef": "select에는 ref 파라미터가 필요해요",
    "browserSelectNeedValue": "select에는 value 파라미터가 필요해요",
    "browserSelected": "[{ref}] → \"{value}\" 선택했어요\n\n{snapshot}",
    "browserKeyNeedKey": "key에는 key 파라미터가 필요해요",
    "browserKeyPressed": "{key}을(를) 눌렀어요\n\n{snapshot}",
    "browserWaitDone": "대기 완료\n\n{snapshot}",
    "browserEvalNeedExpr": "evaluate에는 expression 파라미터가 필요해요",
    "browserOutputTruncated": "\n\n[... 출력이 잘렸어요]",
    "browserShown": "브라우저 창을 앞으로 가져왔어요",
    "browserUnknownAction": "알 수 없는 동작: {action}",
    "browserActionFailed": "브라우저 동작 실패: {msg}",
    "skillNeedAbsolutePath": "절대 경로가 필요해요",
    "skillPathNotExists": "경로가 존재하지 않아요",
    "skillMissingSkillMd": "폴더에 SKILL.md가 없어요",
    "skillUnsupportedFormat": ".zip 또는 .skill 파일만 지원해요",
    "skillMissingSkillMdInZip": "압축 파일에 SKILL.md가 없어요",
    "skillExtractFailed": "압축 해제 실패: {msg}",
    "skillMissingName": "SKILL.md에 name 필드가 없어요",
    "skillNameInvalid": "스킬 이름이 유효하지 않아요 (\"{name}\"). 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "skillPathMustBeAbsolute": "경로는 절대 경로여야 해요: {path}",
    "skillCannotAddSelfDir": "Hanako 자체의 스킬 디렉토리는 추가할 수 없어요",
    "skillInvalidName": "유효하지 않은 스킬 이름이에요",
    "skillExternalCannotDelete": "외부 호환 스킬은 여기서 삭제할 수 없어요",
    "skillNotExists": "스킬이 존재하지 않아요",
    "channelsDisabled": "채널 기능이 사용자에 의해 비활성화되었어요",
    "channelReadNeedChannel": "오류: read에는 channel 파라미터가 필요해요",
    "channelNotExists": "채널 \"{channel}\"이(가) 존재하지 않아요",
    "agentNotChannelMember": "채널 \"{channel}\"의 멤버가 아니라서 메시지를 보낼 수 없어요",
    "channelNoMessages": "(채널에 메시지가 없어요)",
    "channelPostNeedParams": "오류: post에는 channel과 content 파라미터가 필요해요",
    "channelPosted": "#{channel}에 전송했어요",
    "channelCreateNeedParams": "오류: create에는 name과 members 파라미터가 필요해요",
    "channelCreated": "채널 #{name} ({id}) 생성 완료, 멤버: {members}",
    "channelCreateFailed": "생성 실패: {msg}",
    "channelNoJoined": "아직 채널에 참여하지 않았어요",
    "unknownAction": "알 수 없는 동작: {action}",
    "cannotSelfDm": "자기 자신에게 DM을 보낼 수 없어요",
    "dmSent": "{name}에게 DM을 보냈어요",
    "agentNotFoundAvailable": "agent「{id}」를 찾을 수 없어요. agent의 id 필드 값(표시 이름이 아닌)을 사용해 주세요. 사용 가능:\n{ids}",
    "noOtherAgents": "현재 사용할 수 있는 다른 agent가 없어요.",
    "cronNoJobs": "예약 작업이 없어요",
    "cronAddNeedParams": "오류: add에는 scheduleType, schedule, prompt 파라미터가 필요해요",
    "cronEveryMustBeNumber": "오류: every 타입의 schedule은 양의 정수(밀리초)여야 해요",
    "cronCreated": "예약 작업을 생성했어요: {label} ({id})",
    "cronConfirmed": "사용자가 확인했어요. 예약 작업을 생성했어요: {label} ({id})",
    "cronRejected": "사용자가 예약 작업 \"{label}\"의 생성을 취소했어요",
    "cronTimeout": "예약 작업 \"{label}\" 확인 시간이 초과되었어요",
    "cronPendingConfirm": "예약 작업 {label} 생성 준비 중, 확인 대기",
    "cronRemoveNeedId": "오류: remove에는 id 파라미터가 필요해요",
    "cronJobNotFound": "작업 {id}를 찾을 수 없어요",
    "cronRemoved": "작업 {id}를 삭제했어요",
    "cronToggleNeedId": "오류: toggle에는 id 파라미터가 필요해요",
    "cronToggled": "작업 {id} {state}",
    "cronEnabled": "활성화됨",
    "cronDisabled": "비활성화됨",
    "notifySent": "알림을 보냈어요: {title}",
    "notifyFailed": "알림 전송 실패: {msg}",
    "artifactCreated": "미리보기를 생성했어요: {title}",
    "pinnedAlreadyExists": "이미 고정 메모리에 있어요.",
    "pinnedAdded": "기억했어요: {content}",
    "pinnedEmpty": "고정 메모리가 비어 있어요. 제거할 내용이 없어요.",
    "pinnedNotFound": "\"{keyword}\"을(를) 포함하는 고정 메모리를 찾을 수 없어요.",
    "pinnedRemoved": "{count}개를 제거했어요: {items}",
    "expEmpty": "경험 라이브러리가 비어 있어요.",
    "expCategoryNotFound": "\"{category}\" 카테고리의 경험을 찾을 수 없어요.",
    "expEmptyInput": "카테고리 이름과 경험 내용을 비워둘 수 없어요.",
    "expDuplicate": "이 경험은 이미 기록되어 있어요.",
    "expRecorded": "경험을 기록했어요 [{category}]: {content}",
    "outputFileNeedPaths": "filepaths 배열 또는 filePath가 필요해요.",
    "outputFileNotAbsolute": "경로는 절대 경로여야 해요: {path}",
    "outputFileNotFound": "파일을 찾을 수 없어요: {path}",
    "outputFilePresented": "파일을 표시했어요: {summary}",
    "settingsUnknownKey": "알 수 없는 설정 항목 \"{key}\". search로 올바른 키를 찾아보세요.",
    "settingsInvalidValue": "\"{value}\"은(는) 유효한 옵션이 아니에요. 사용 가능: {options}",
    "settingsInvalidToggle": "toggle 유형은 \"true\" 또는 \"false\"만 허용돼요.",
    "settingsNotReady": "설정 시스템이 준비되지 않았어요",
    "settingsNoAgent": "활성 에이전트가 없습니다. 이 설정을 변경할 수 없습니다",
    "settingsApplied": "\"{label}\"을(를) {value}(으)로 변경했어요",
    "settingsApplyFailed": "설정 변경 실패: {msg}",
    "settingsCancelled": "사용자가 \"{label}\" 변경을 취소했어요",
    "settingsTimeout": "\"{label}\" 변경 확인 시간이 초과되었어요. 설정이 변경되지 않았어요",
    "subagentMaxConcurrent": "현재 {max}개의 서브 에이전트가 실행 중이에요. 완료될 때까지 기다려 주세요.",
    "subagentFailed": "서브 에이전트 실행 실패: {msg}",
    "subagentTimeout": "서브 에이전트 실행 시간 초과 ({minutes}분)",
    "subagentAborted": "서브 에이전트가 중단되었어요",
    "subagentNoOutput": "(서브 에이전트가 출력을 생성하지 않았어요)",
    "subagentDispatched": "서브 작업을 보냈어요 (task-id: {taskId}). 완료되면 결과가 자동으로 전달돼요.",
    "installSkillDisabled": "자가 학습 스킬 기능이 활성화되지 않았어요. 설정에서 「Agent의 스킬 생성/설치 허용」을 켜주세요.",
    "installSkillGithubDisabled": "GitHub 스킬 가져오기가 활성화되지 않았어요. 설정에서 「GitHub에서 스킬 가져오기 허용」을 켜주세요.",
    "installSkillInvalidGithubUrl": "잘못된 GitHub URL: {url}",
    "installSkillGithubApiFailed": "리포지토리 정보를 가져올 수 없어요 (HTTP {status}). URL을 확인해 주세요.",
    "installSkillGithubApiError": "GitHub API 접근 실패: {msg}",
    "installSkillStarTooLow": "이 리포지토리는 {stars} stars만 있어요 (기준 {min}). 안전성을 보장할 수 없어 설치를 거부했어요.",
    "installSkillNoSkillMd": "{owner}/{repo}에서 SKILL.md를 찾을 수 없어요 (시도한 경로: {paths}).",
    "installSkillSafetyFailed": "[보안] 스킬 안전 검토를 통과하지 못했어요. 설치가 차단되었어요.\n이유: {reason}\n\n사용자에게 이 스킬이 안전 검토를 통과하지 못했음과 구체적인 이유를 알려주세요. 사용자는 설정에서 안전 검토를 비활성화할 수 있어요 (비권장).",
    "installSkillNameInvalid": "스킬 이름이 유효하지 않아요{name}. 영문자, 숫자, 밑줄, 하이픈만 사용할 수 있어요.",
    "installSkillSuccess": "스킬 \"{name}\" 설치 성공!\n출처: {source} (⭐ {stars} stars)\n이유: {reason}",
    "installSkillNeedInput": "github_url 또는 skill_content (SKILL.md 내용)를 제공해 주세요.",
    "installSkillNeedName": "skill_content 모드에서는 skill_name이 필요해요.",
    "installSkillSuccessLocal": "스킬 \"{name}\" 설치 성공!\n이유: {reason}",
    "installSkillSizeLimit": "스킬 내용이 크기 제한을 초과했어요 ({size}KB > {max}KB)",
    "installSkillNoUtility": "안전 검토 불가: utility 모델이 설정되지 않았어요. 설정에서 보조 모델을 설정해 주세요",
    "installSkillUtilityIncomplete": "안전 검토 불가: 보조 모델 설정이 불완전해요 (API key 또는 base URL 누락). 설정에서 보완해 주세요",
    "installSkillSafetyEmpty": "안전 검토가 빈 응답을 반환했어요",
    "installSkillSafetyUnexpected": "안전 검토가 예상하지 못한 형식을 반환했어요: {reply}",
    "installSkillSafetyTimeout": "안전 검토 타임아웃 또는 네트워크 오류",
    "activeSessionOnly": "현재 어시스턴트의 활성 세션만 승격할 수 있어요",
    "heartbeatTriggered": "하트비트가 트리거되었어요",
    "dirNotAllowed": "디렉토리가 허용 범위에 없어요",
    "noWorkspace": "워크스페이스가 설정되지 않았어요",
    "tokenSuccess": "토큰을 성공적으로 가져왔어요",
    "verifyFailed": "인증에 실패했어요",
    "tokenFetchFailed": "access_token 가져오기 실패",
    "botInfoFailed": "봇 정보 가져오기 실패",
    "platformTestUnsupported": "이 플랫폼은 테스트를 지원하지 않아요",
    "codexNoHealthCheck": "Codex API는 헬스 체크를 지원하지 않아요",
    "modelNotFound": "모델을 찾을 수 없어요: {id}",
    "noUtilityModel": "utility 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "noUtilityLargeModel": "utility_large 모델이 설정되지 않았어요. 설정에서 추가해 주세요",
    "modelNoProvider": "{role} 모델 \"{model}\"에 provider가 연결되지 않았어요",
    "providerMissingApi": "provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "providerMissingCreds": "provider \"{provider}\"의 인증 정보가 불완전해요",
    "utilityApiProviderMismatch": "utility_api.provider는 모델 \"{model}\"의 provider와 일치해야 해요",
    "utilityApiMissingCreds": "utility_api 인증 정보가 불완전해요 (provider: {provider})",
    "noAvailableModel": "사용 가능한 모델이 없어요. 설정에서 API 키와 모델을 먼저 설정해 주세요",
    "noActiveSessionPrompt": "활성 세션이 없어요. 먼저 createSession()을 호출해 주세요",
    "sessionNotInCache": "세션 \"{path}\"이(가) 캐시에 없어요",
    "agentNotInitialized": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "resolveModelNoChatModel": "resolveModel: models.chat이 지정되지 않아 모델을 선택할 수 없어요",
    "resolveModelNotAvailable": "resolveModel: 모델 \"{id}\"가 사용 가능한 목록에 없어요",
    "executeIsolatedNoModel": "executeIsolated: agent \"{name}\"에 사용 가능한 모델이 없어요",
    "bridgeAgentNoChatModel": "[bridge] agent \"{name}\"에 models.chat이 설정되지 않았어요",
    "bridgeAgentModelNotAvailable": "[bridge] agent \"{name}\"에 설정된 모델 \"{model}\"이(가) 사용 가능한 목록에 없어요",
    "noAgentsFound": "agents/ 디렉토리에 어시스턴트가 없어요. 먼저 하나를 만들어 주세요",
    "channelNotFoundById": "채널 \"{id}\"이(가) 존재하지 않아요",
    "channelAlreadyExists": "채널 \"{id}\"이(가) 이미 존재해요",
    "providerMissingBaseUrl": "provider \"{provider}\"에 Base URL이 없어요",
    "providerMissingApiKey": "provider \"{provider}\"에 API Key가 없어요",
    "modelNameEmpty": "모델 이름을 비워둘 수 없어요",
    "modelNotRegistered": "모델 \"{model}\"이(가) models.json에 provider로 등록되지 않았어요",
    "modelProviderMissingApi": "모델 \"{model}\"의 provider \"{provider}\"에 API 프로토콜 설정이 없어요",
    "modelProviderIncomplete": "모델 \"{model}\"의 provider \"{provider}\" 설정이 불완전해요",
    "browserDesktopOnly": "브라우저 기능은 Electron 데스크톱 모드에서만 사용할 수 있어요",
    "browserCmdTimeout": "브라우저 명령 타임아웃: {cmd}",
    "agentExecNotInit": "agent \"{id}\"가 존재하지 않거나 초기화되지 않았어요",
    "bridgeMgrNotStarted": "외부 플랫폼 관리자가 시작되지 않았어요",
    "qqTokenFailed": "access_token 가져오기 실패: {detail}",
    "missingApiProtocol": "API 프로토콜 설정이 없어요",
    "missingApiKey": "API Key가 없어요",
    "unsupportedApiProtocol": "지원하지 않는 API 프로토콜: {api}",
    "missingModelId": "모델 ID가 없어요",
    "missingBaseUrl": "Base URL이 없어요",
    "llmInvalidJson": "LLM이 파싱할 수 없는 JSON을 반환했어요 ({status})",
    "llmEmptyResponse": "LLM이 빈 내용을 반환했어요",
    "xlsxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "docxParseFailed": "{ext} 파일을 파싱할 수 없어요: {msg}",
    "compatDirCreated": "누락된 디렉토리 {count}개를 생성했어요",
    "compatConfigEmpty": "파일이 비어 있어요",
    "compatConfigInvalid": "YAML 형식이 아닌 것 같아요",
    "compatConfigCorrupted": "config.yaml 손상 ({msg}), 템플릿에서 다시 만들었어요",
    "compatConfigBackedUp": "config.yaml 손상 ({msg}), {backup}(으)로 백업했어요",
    "compatFactsCorrupted": "facts.db 손상 백업 완료, 빈 데이터베이스를 재구축해요",
    "defaultChannelName": "워크그룹",
    "defaultChannelDesc": "일상 업무 조율 채널. 모든 멤버가 여기서 소통해요.",
    "memorySearchLabel": "기억 검색",
    "memorySearchDesc": "기억 뱅크를 검색해요. 무언가에 대해 확실하지 않을 때, 이전에 이야기한 것 같지만 세부 사항이 기억나지 않을 때, 또는 더 많은 맥락이 필요할 때 사용하세요. 자연어 쿼리와 선택적 태그 필터를 입력해요.",
    "memorySearchQueryDesc": "자연어로 된 검색 쿼리",
    "memorySearchTagsDesc": "태그 필터, 정확한 매칭을 위해 2~5개 키워드 태그. 예: [\"초콜릿\", \"음식 취향\"]",
    "memorySearchDateFromDesc": "시작 날짜, 형식 YYYY-MM-DD",
    "memorySearchDateToDesc": "종료 날짜, 형식 YYYY-MM-DD",
    "memorySearchEmpty": "기억 뱅크에서 관련 내용을 찾을 수 없어요.",
    "memorySearchError": "기억 검색 오류: {msg}",
    "fallbackUserName": "사용자",
    "uploadFailed": "파일 가져오기 실패",
    "uploadPartialFail": "일부 파일을 가져올 수 없습니다: {files}",
    "stopTaskNotFound": "태스크 {taskId}를 찾을 수 없어요. 이미 완료됐거나 존재하지 않을 수 있어요",
    "stopTaskAlready": "태스크 {taskId}는 이미 종료됐어요",
    "stopTaskNoHandler": "태스크 {taskId}는 중단을 지원하지 않아요",
    "stopTaskDone": "태스크 {taskId}를 종료했어요"
  },
  "main": {
    "tray": {
      "show": "Hanako 표시",
      "settings": "설정",
      "quit": "종료"
    },
    "dialog": {
      "selectFolder": "작업 폴더 선택",
      "selectSkill": "스킬 선택",
      "selectPlugin": "플러그인 선택",
      "launchFailedTitle": "Hanako 실행 실패",
      "launchFailedBody": "Hanako v{version}\n\n{detail}\n\n상세 로그 저장 위치:\n{logPath}\n\n이 스크린샷이나 로그 파일을 개발자에게 보내주세요.",
      "serverRestartFailed": "Hanako v{version}\n\nServer가 충돌 후 재시작에 실패했어요.\n{error}\n\n앱을 다시 시작해 주세요.",
      "serverMultipleCrash": "Hanako v{version}\n\nServer가 여러 번 충돌했어요 ({reason}).\n\n앱을 다시 시작해 주세요.",
      "serverStartTimeout": "Server 시작 시간 초과 (60초)",
      "serverKilledBySignal": "Server가 시그널로 종료되었어요 ({signal})",
      "serverExitedWithCode": "Server가 종료되었어요. 코드: {code}"
    },
    "notification": {
      "ready": "알림이 준비되었어요"
    }
  },
  "devtools": {
    "heartbeat": "하트비트",
    "memoryExport": "메모리 내보내기",
    "onboarding": "Onboarding",
    "previewGuide": "가이드 미리보기",
    "reloadFrontend": "프론트엔드 새로고침",
    "tabLogs": "활동 로그",
    "tabSessions": "세션 목록",
    "tabPrompt": "System Prompt",
    "waitingConnection": "연결 대기 중...",
    "waitingServer": "Server 시작 대기 중...",
    "loading": "로딩 중...",
    "loadFailed": "로드 실패",
    "refreshBtn": "새로고침",
    "clickRefresh": "위의 새로고침을 클릭하세요",
    "noActivities": "아직 활동 없음",
    "heartbeatLabel": "자동 순찰",
    "cronLabel": "예약 작업",
    "heartbeatRunning": "하트비트 실행 중...",
    "heartbeatGenerating": "요약 생성 중...",
    "heartbeatDone": "하트비트 완료",
    "heartbeatNoSummary": "하트비트 완료 (요약 없음)",
    "memoryExported": "메모리 내보내기 완료",
    "exportFailed": "내보내기 실패",
    "onboardingOpened": "Onboarding 창이 열렸습니다",
    "previewOpened": "미리보기 모드 열림",
    "openFailed": "열기 실패",
    "frontendReloaded": "프론트엔드 새로고침 완료",
    "refreshFailed": "새로고침 실패",
    "triggerFailed": "트리거 실패",
    "requestFailed": "요청 실패",
    "justNow": "방금",
    "minutesAgo": "{n}분 전",
    "hoursAgo": "{n}시간 전",
    "chars": "자",
    "empty": "비어 있음",
    "serverConnected": "Server 연결됨 (port {port})"
  },
  "skillViewer": {
    "cantRead": "파일을 읽을 수 없습니다",
    "copied": "스킬 목록에 복사됨",
    "installFailed": "설치 실패: "
  },
  "toolDef": {
    "webSearch": {
      "label": "웹 검색",
      "description": "인터넷을 검색해서 실시간 정보를 가져와요. 최신 뉴스, 기술 문서, 시사, 또는 기억에 없는 외부 지식이 필요할 때 사용해요.",
      "queryDesc": "검색 키워드",
      "maxResultsDesc": "반환할 결과 수, 기본값 5"
    },
    "webFetch": {
      "label": "웹페이지 가져오기",
      "description": "지정한 URL의 웹페이지 내용을 가져와서 텍스트를 추출해요. 기사, 문서, API 응답 등을 읽을 때 적합해요. web_search와 함께 사용해요: 먼저 검색으로 URL을 찾고, web_fetch로 상세 내용을 읽어요.",
      "urlDesc": "가져올 전체 URL (https:// 포함)",
      "maxLenDesc": "반환할 최대 문자 수, 기본값 {max}"
    },
    "browser": {
      "label": "브라우저",
      "description": "헤드리스 브라우저를 제어해요（navigate, click, type, scroll, screenshot, JS 실행）. action 파라미터로 작업을 선택하고, 각 action에 필요한 파라미터는 action 필드 설명을 참고하세요. 주의: snapshot이 반환한 [ref] 번호는 navigate/click/type 이후 무효가 돼요. 이 작업들은 자동으로 새 snapshot을 반환하므로 항상 최신 snapshot의 ref를 사용하세요.",
      "actionDesc": "실행할 작업. 각 action의 필수 파라미터: navigate→url; click→ref; type→text (선택 ref, pressEnter); scroll→direction (선택 amount); select→ref+value; key→key; wait→(선택 timeout, state); evaluate→expression. start, stop, snapshot, screenshot, show는 추가 파라미터 불필요.",
      "urlDesc": "URL (navigate에 필수)",
      "refDesc": "요소 ref 번호 (click/type/select에 사용)",
      "textDesc": "입력 텍스트 (type에 필수)",
      "directionDesc": "스크롤 방향 (scroll에 필수)",
      "amountDesc": "스크롤 양 (scroll에 선택, 기본값 3)",
      "valueDesc": "옵션 값 (select에 필수)",
      "keyDesc": "키 이름 (key에 필수), 예: Enter, Escape, Tab, Control+a",
      "expressionDesc": "JavaScript 표현식 (evaluate에 필수)",
      "timeoutDesc": "타임아웃 밀리초 (wait에 선택, 기본값 5000)",
      "stateDesc": "대기 상태 (wait에 선택): domcontentloaded / idle",
      "pressEnterDesc": "입력 후 Enter 누르기 (type에 선택)"
    },
    "channel": {
      "label": "채널",
      "description": "채널 메시지를 관리해요 (브로드캐스트, 그룹 토론용).\n동작:\n- read(channel, count?): 채널의 최근 메시지 보기\n- post(channel, content): 채널에 메시지 보내기\n- create(name, members, intro?): 새 채널 만들기\n- list: 참여 중인 채널 보기\n참고: agent와 1:1 메시지를 하려면 dm 도구를 사용하세요. 채널로 개인 대화를 흉내 내지 마세요.",
      "actionDesc": "동작 유형",
      "channelDesc": "채널 이름 (read/post에 필수)",
      "contentDesc": "메시지 내용 (post에 필수)",
      "nameDesc": "새 채널 이름 (create에 필수)",
      "membersDesc": "멤버 목록 (create에 필수), 예: [\"hana\", \"butter\"]",
      "introDesc": "채널 소개 (create에 선택)",
      "countDesc": "읽을 메시지 수 (read에 선택, 기본값 20)"
    },
    "artifact": {
      "label": "미리보기 만들기",
      "description": "사용자에게 HTML 페이지, 코드 스니펫, 또는 긴 Markdown 콘텐츠를 보여줘야 할 때 이 도구를 호출해요.\n콘텐츠는 독립된 미리보기 패널에서 렌더링되고, 사용자가 실시간으로 결과를 확인할 수 있어요.\n적합한 경우: 실행 가능한 HTML/CSS/JS 페이지, 인터랙티브 시각화, SVG 차트, 완전한 코드 파일, 긴 포맷 문서.\n적합하지 않은 경우: 짧은 텍스트 답변, 대화형 응답, 한 줄 코드 스니펫 (메시지에 직접 표시하면 돼요).",
      "typeDesc": "콘텐츠 유형: html (렌더링 페이지), code (구문 강조), markdown (문서)",
      "titleDesc": "표시 제목, 콘텐츠에 대한 간단한 설명",
      "contentDesc": "전체 콘텐츠 (HTML 소스 / 코드 / Markdown 텍스트)",
      "languageDesc": "프로그래밍 언어 (type=code일 때만 유효), 예: javascript, python, css"
    },
    "dm": {
      "label": "다이렉트 메시지",
      "description": "다른 agent에게 다이렉트 메시지를 하나 보내서 무언가를 알려줄 때만 사용해요.\n이 도구로 작업을 맡기거나 결과를 받으려 하지 마세요. 그건 subagent의 역할이에요.",
      "toDesc": "대상 agent의 id 필드 값(팀 목록의 괄호 안, 굵은 표시 이름이 아님)",
      "messageDesc": "메시지 내용"
    },
    "cron": {
      "label": "예약 작업",
      "description": "예약 작업을 만들고 관리해요. 예약 작업은 백그라운드에서 자동 실행되고, 지정 시간에 독립 session을 열어서 prompt를 실행해요.\n동작:\n- list: 전체 작업 보기\n- add(scheduleType, schedule, prompt, label?, model?): 작업 만들기\n  - scheduleType \"at\": 일회성, schedule은 ISO 시간 문자열\n  - scheduleType \"every\": 간격, schedule은 분 (예: 60 = 매시간)\n  - scheduleType \"cron\": cron 표현식 (예: \"0 7 * * *\" = 매일 아침 7시)\n  - model: 선택, 작업 실행에 사용할 모델 지정 (미지정 시 대화 모델 사용)\n- remove(id): 작업 삭제\n- toggle(id): 작업 활성화/비활성화",
      "actionDesc": "동작 유형",
      "scheduleTypeDesc": "스케줄 유형 (add에 필수)",
      "scheduleDesc": "스케줄: ISO 시간(at), 분(every, 예: 60=매시간), cron 표현식(cron)",
      "promptDesc": "지정 시간에 실행할 prompt (add에 필수)",
      "labelDesc": "작업 표시 라벨 (선택)",
      "modelDesc": "실행 모델 지정 (선택, 미지정 시 대화 모델 사용)",
      "idDesc": "작업 ID (remove/toggle에 필수)"
    },
    "notify": {
      "label": "알림",
      "description": "사용자에게 시스템 알림 (데스크톱 팝업)을 보내요.\n사용 상황:\n- 사용자가 'xxx 알려줘', '그때 알려줘', 'xxx 잊지 않게 해줘'라고 말했을 때\n- 예약 작업의 prompt에 알림/리마인드 의도가 명시되어 있을 때\n- 순찰/예약 작업에서 사용자의 관심이 필요한 사항을 발견했을 때\n모든 게 정상이고 문제가 없으면 이 도구를 호출하지 마세요.",
      "titleDesc": "알림 제목 (간결하게)",
      "bodyDesc": "알림 내용"
    },
    "todoWrite": {
      "label": "할 일",
      "description": "현재 세션의 할 일 목록을 관리합니다. 호출할 때마다 완전한 todos 배열을 전달하여 현재 상태를 대체합니다(교체 방식).\n각 할 일에 필요한 항목:\n- content: 정적 설명(예: '스펙 읽기')\n- activeForm: 진행 중 설명(예: '스펙 읽는 중')\n- status: pending | in_progress | completed\n규약: 동시에 최대 하나의 in_progress.",
      "contentDesc": "할 일의 정적 설명",
      "activeFormDesc": "진행 중 형식 설명(UI에서 in_progress 표시 시 사용)",
      "statusDesc": "pending / in_progress / completed 중 하나",
      "todosDesc": "완전한 할 일 목록. 호출할 때마다 이전 목록을 대체합니다",
      "summaryEmpty": "할 일을 비웠어요",
      "summaryStats": "총 {total}개: {completed} 완료, {in_progress} 진행 중, {pending} 대기"
    },
    "pinnedMemory": {
      "pinLabel": "메모리 고정",
      "pinDescription": "고정 메모리에 내용을 저장해요. 사용자가 '이거 기억해 줘', '메모해 줘', '나중에 잊지 마'라고 말했을 때 사용해요. 고정 메모리는 항상 컨텍스트에 유지돼요.",
      "pinContentDesc": "기억할 내용",
      "unpinLabel": "메모리 고정 해제",
      "unpinDescription": "고정 메모리에서 내용을 삭제해요. 사용자가 'xxx 잊어', '이 기억 지워'라고 말했을 때 사용해요. 퍼지 매칭을 지원해요: 제공한 키워드를 포함하는 줄이 삭제돼요.",
      "unpinKeywordDesc": "삭제할 메모리의 키워드, 퍼지 매칭으로 검색"
    },
    "experience": {
      "recallLabel": "경험 확인",
      "recallDescription": "경험 라이브러리를 탐색해요. 파라미터 없이 호출하면 전체 카테고리 개요를 반환하고, 카테고리 이름을 지정하면 해당 카테고리의 구체적인 경험을 반환해요. 사용자가 구체적인 작업 (코드 작성, 조사, 문서 작성, 문제 분석 등)을 요청했을 때, 시작 전에 이 도구로 참고할 경험이 있는지 확인해요. 일상 대화, Q&A, 가벼운 채팅에서는 호출할 필요 없어요.",
      "recallCategoryDesc": "카테고리 이름. 생략하면 전체 카테고리 개요를 반환해요",
      "recordLabel": "경험 기록",
      "recordDescription": "경험 라이브러리에 교훈을 기록해요. 다음 경우에 사용해요: 사용자가 실수를 지적하고 올바른 방법을 설명했을 때, 여러 방법을 시도한 후 효과적인 방법을 발견했을 때, 사용자가 '앞으로는 이렇게 해/하지 마'라고 명확히 말했을 때. 각 항목은 간결하고 직접적으로, 한 문장으로 작성해요.",
      "recordCategoryDesc": "경험의 카테고리, 2~4단어 짧은 문구, 예: '도구 사용', '검색 팁', '답변 스타일'",
      "recordContentDesc": "구체적인 경험 내용, 간결하고 직접적으로, 한 문장"
    },
    "outputFile": {
      "label": "파일 전달",
      "description": "누군가(사용자, agents)를 위해 파일을 성공적으로 만들었거나, 파일을 제공해 달라는 요청을 받았을 때 이 도구를 호출해서 대화에 파일을 제시해요. 파일이 존재할 때만 호출하고, 파일을 찾을 수 없거나 생성에 실패했을 때는 호출하지 마세요. 텍스트에서 파일 경로만 언급하지 말고, 반드시 이 도구를 호출하세요.",
      "filepathsDesc": "파일 절대 경로 배열",
      "filePathDesc": "(호환) 단일 파일의 절대 경로",
      "labelDesc": "(호환) 사용자에게 표시할 파일 이름"
    },
    "subagent": {
      "label": "서브 에이전트 시작",
      "description": "서브 에이전트에게 작업을 위임해요. 다른 agent를 지정하거나(agent 파라미터), 생략하면 자기 자신이 분신으로 실행해요. agent=\"?\"로 사용 가능한 agent 목록을 확인할 수 있어요.\n\n판단 기준:\n- 병렬로 진행할 수 있는 작업이 있으면 계속 진행하세요\n- 결과가 있어야 다음 단계로 넘어갈 수 있다면, 사용자에게 작업을 보냈고 답변을 기다리고 있다고 알려주세요\n\n적합한 경우:\n- 대량의 검색, 읽기 후 간결한 결론으로 요약하는 조사 작업\n- 현재 작업과 병렬로 진행할 수 있는 독립적인 하위 문제\n- 여러 방향을 동시에 탐색해야 하는 작업 (여러 subagent를 동시에 호출 가능)\n- 다른 agent가 전문적 관점에서 작업을 처리하도록\n적합하지 않은 경우: 파일 수정, 명령 실행 등 부작용이 있는 작업\n\n중요: task 파라미터에 완전한 지시와 필요한 배경 정보를 포함하세요. 서브 에이전트는 현재 대화 기록을 볼 수 없어요.",
      "taskDesc": "서브 에이전트에 대한 완전한 지시. 형식: 첫 번째 줄에 「작업: xxx」을 작업 제목으로 쓰고, 빈 줄 다음에 상세한 요구사항과 필요한 배경 정보를 작성하세요. 서브 에이전트는 현재 대화 기록을 볼 수 없으므로 필요한 모든 맥락을 여기에 작성해야 해요.",
      "agentDesc": "대상 agent의 id 필드 값(팀 목록의 괄호 안, 굵은 표시 이름이 아님). 생략하면 자신이 실행, \"?\"로 사용 가능한 agent 목록 보기.",
      "modelDesc": "모델 지정 (선택, 기본값은 utility 모델)"
    },
    "installSkill": {
      "label": "스킬 설치",
      "description": "자신에게 새로운 스킬을 설치해요. 모드 A: GitHub 저장소 URL (SKILL.md 포함)을 제공해서 자동으로 가져오고 설치해요. 모드 B: skill_content + skill_name을 직접 제공, 직접 작성한 스킬용이에요. 설치 후 즉시 적용돼요.",
      "githubUrlDesc": "GitHub 저장소 URL (모드 A)",
      "skillContentDesc": "SKILL.md의 전체 내용 (모드 B)",
      "skillNameDesc": "스킬 이름 (모드 B에 필수)",
      "reasonDesc": "이 스킬이 필요한 이유 설명 (감사용, 필수)",
      "userRequestedDesc": "사용자가 명시적으로 설치를 요청했는지 여부 (true = 사용자 스킬, false = 학습 스킬)"
    },
    "updateSettings": {
      "label": "설정",
      "description": "Hanako의 설정을 변경해요. 두 가지 작업을 지원해요:\n- search + query: 키워드로 설정 항목을 검색하고, 현재 값과 옵션을 확인\n- apply + key + value: 지정한 설정을 변경 (사용자 확인 필요)\n\n정확한 키를 알고 있다면 바로 apply할 수 있어요.",
      "actionDesc": "작업 유형: search로 설정 검색 / apply로 설정 변경",
      "queryDesc": "검색 키워드 (search 시 필수)",
      "keyDesc": "설정 키 (search로 확인)",
      "valueDesc": "제안할 새 값",
      "searchResult": "{count}개의 설정을 찾았어요:\n\n{results}\n\naction \"apply\"로 키와 값을 지정해서 설정을 변경할 수 있어요.",
      "searchNoResults": "\"{query}\"에 맞는 설정을 찾지 못했어요. 더 넓은 키워드를 시도해 보세요.",
      "searchMissingQuery": "search 작업에는 query 파라미터가 필요해요.",
      "applyMissingParams": "apply 작업에는 key와 value가 모두 필요해요.",
      "frontendOnly": "클라이언트 측에서만 확인 가능",
      "sandbox": "샌드박스 보안",
      "sandboxDesc": "파일 시스템 쓰기 범위 제한",
      "locale": "언어",
      "timezone": "시간대",
      "timezoneDesc": "IANA 시간대 (예: Asia/Shanghai)",
      "thinkingBudget": "사고 깊이",
      "memory": "메모리 시스템",
      "memoryDesc": "현재 Agent의 메모리 기능 켜기/끄기",
      "agentName": "Agent 이름",
      "userName": "사용자 이름",
      "workingDir": "작업 디렉토리",
      "workingDirDesc": "Agent의 파일 시스템 작업 디렉토리",
      "theme": "테마",
      "chatModel": "대화 모델",
      "fileBackup": "파일 백업",
      "fileBackupDesc": "AI 수정 전 파일 자동 백업"
    },
    "stopTask": {
      "label": "백그라운드 태스크 종료",
      "description": "실행 중인 백그라운드 태스크를 종료합니다. task_id를 전달하면 해당 태스크가 중단됩니다. 지원 태스크 유형: 서브에이전트 태스크, 이미지/영상 생성 태스크 등.",
      "taskIdDesc": "종료할 태스크 ID"
    }
  },
  "cli": {
    "disconnected": "연결 끊김",
    "wsError": "WebSocket 오류: {msg}",
    "error": "오류: {msg}",
    "interrupted": "(중단됨)",
    "goodbye": "안녕히 ✿",
    "helpTitle": "명령어 목록",
    "helpModel": "현재 모델 보기",
    "helpModelSet": "모델 전환 (대화형)",
    "helpConfig": "설정 보기",
    "helpSessionNew": "새 세션",
    "helpSessionList": "세션 목록",
    "helpAgent": "현재 agent 보기",
    "helpAgentList": "모든 agent 보기",
    "helpAgentSwitch": "agent 전환",
    "helpJian": "현재 디렉토리의 메모 보기",
    "helpJianSub": "하위 디렉토리의 메모 보기",
    "helpLs": "데스크 파일 목록",
    "helpLsSub": "하위 디렉토리 파일 목록",
    "helpCat": "파일 내용 보기",
    "helpHelp": "이 도움말 표시",
    "helpEsc": "생성 중단",
    "helpCtrlC": "중단 / 종료",
    "noModels": "사용 가능한 모델이 없어요",
    "availableModels": "사용 가능한 모델:",
    "currentModel": "← 현재",
    "selectModel": "번호를 입력해 선택: ",
    "modelSwitched": "{name}(으)로 전환했어요",
    "cancelled": "취소",
    "currentModelLabel": "현재 모델:",
    "noModel": "(없음)",
    "currentConfig": "현재 설정",
    "notSet": "(미설정)",
    "sessionCreated": "새 세션을 만들었어요",
    "noSessions": "세션이 없어요",
    "sessionList": "세션 목록",
    "untitled": "(제목 없음)",
    "sessionUsage": "사용법: /session new | /session list",
    "agentList": "Agent 목록",
    "agentSwitched": "{name}(으)로 전환했어요",
    "currentAgent": "현재 Agent:",
    "jianTitle": "메모",
    "jianEmpty": "이 디렉토리에 메모가 없어요",
    "dirEmpty": "(비어있음)",
    "catUsage": "사용법: /cat <파일 경로>",
    "catFailed": "읽을 수 없어요: {status}",
    "unknownCommand": "알 수 없는 명령어: /{cmd}  /help로 도움말 보기",
    "inputHelp": "/help로 명령어 목록 보기"
  },
  "sandbox": {
    "blocked": "[보안] {reason}\n\n이 작업은 Hanako의 샌드박스 보안 정책에 의해 차단되었어요. 이것은 버그가 아니라 보안 보호 메커니즘이에요. 사용자에게 작업이 차단되었음과 이유를 알려주세요. 사용자는 설정에서 샌드박스 정책을 조정할 수 있어요.",
    "noSudo": "sudo 사용이 금지되어 있어요",
    "noSu": "su 사용자 전환이 금지되어 있어요",
    "noChmod": "파일 권한 변경이 금지되어 있어요",
    "noChown": "파일 소유자 변경이 금지되어 있어요",
    "noDelRecursive": "재귀적 파일 삭제 (del /s)가 금지되어 있어요",
    "noRmdirRecursive": "재귀적 디렉토리 삭제 (rmdir /s)가 금지되어 있어요",
    "noRegEdit": "레지스트리 수정이 금지되어 있어요",
    "noTakeown": "파일 소유권 가져오기가 금지되어 있어요",
    "noIcacls": "파일 ACL 권한 수정이 금지되어 있어요",
    "noNetUser": "사용자/그룹 관리 작업이 금지되어 있어요",
    "noSchtasks": "예약 작업 생성이 금지되어 있어요",
    "noScService": "시스템 서비스 조작이 금지되어 있어요",
    "noPsExecutionBypass": "PowerShell 실행 정책 우회가 금지되어 있어요",
    "noFormat": "디스크 포맷이 금지되어 있어요",
    "noBcdedit": "부팅 구성 수정이 금지되어 있어요",
    "noWmic": "WMI 명령이 금지되어 있어요",
    "restrictedPath": "명령이 제한된 경로에 접근했어요: {path}",
    "writeRestricted": "[보안] 파일 시스템 쓰기가 워크스페이스 내로 제한되어 있어요. 이 작업은 샌드박스 보안 정책에 의해 차단되었어요. 사용자에게 알려주세요.",
    "osRequired": "[sandbox] standard 모드는 OS 레벨 샌드박스가 필요하지만 현재 플랫폼이 지원하지 않아요 ({platform}). sandbox-exec (macOS) 또는 bubblewrap (Linux)을 설치하거나 full-access 모드로 전환해 주세요.",
    "opRead": "읽기",
    "opWrite": "쓰기",
    "opDelete": "삭제",
    "denied": "{op} 거부됨: {path} (접근 레벨: {level})"
  },
  "error.llmTimeout": "Model request timed out",
  "error.llmRateLimited": "Model rate limited, please wait",
  "error.llmEmptyResponse": "Model returned empty response",
  "error.llmAuthFailed": "Model authentication failed",
  "error.llmSlowResponse": "Model is responding slowly, please wait",
  "error.fsPermission": "File permission denied",
  "error.fsNotFound": "File not found",
  "error.fsCopyFailed": "File copy failed",
  "error.wsDisconnected": "Connection lost",
  "error.fetchTimeout": "Request timed out",
  "error.fetchServerError": "Server error",
  "error.ipcFailed": "Internal communication error",
  "error.renderCrash": "Display error",
  "error.configParse": "Configuration file corrupted",
  "error.bridgeSendFailed": "Failed to send message to platform",
  "error.skillSyncFailed": "Skill sync failed",
  "error.memoryCompileFailed": "Memory compilation failed",
  "error.dbError": "Database error",
  "error.serverAuthFailed": "Authentication failed",
  "error.unknown": "An unexpected error occurred",
  "error.regionUnavailable": "This area is temporarily unavailable",
  "status.reconnecting": "Reconnecting...",
  "status.disconnected": "Connection lost",
  "status.reconnect": "Reconnect",
  "action.retry": "Retry",
  "subagentAbort": "중지",
  "subagentAborted": "중지됨",
  "preview.openInNewWindow": "새 창에서 보기",
  "preview.openInNewWindowUnsupported": "이 파일 형식은 지원되지 않습니다"
}
