@tunnelbox/core 0.1.18 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1191 -22
- package/locales/de-DE.json +307 -166
- package/locales/en-US.json +307 -166
- package/locales/es-ES.json +307 -166
- package/locales/fr-FR.json +307 -166
- package/locales/ja-JP.json +307 -166
- package/locales/ko-KR.json +307 -166
- package/locales/zh-CN.json +307 -166
- package/locales/zh-TW.json +307 -166
- package/package.json +2 -1
- package/src/cli.ts +58 -2
- package/src/qr.ts +2 -1
- package/src/state.ts +6 -5
- package/src/types.ts +2 -0
package/locales/ko-KR.json
CHANGED
|
@@ -1,166 +1,307 @@
|
|
|
1
|
-
{
|
|
2
|
-
"agent.err.createSession": "세션 생성 실패",
|
|
3
|
-
"agent.err.httpClient": "opencode HTTP client에 접근할 수 없습니다",
|
|
4
|
-
"agent.err.unknownPerm": "알 수 없는 권한 요청: {id}",
|
|
5
|
-
"agent.err.unknownQuestion": "알 수 없는 질문 요청: {id}",
|
|
6
|
-
"agent.log.fallback404": "선호 엔드포인트가 404를 반환해 다른 엔드포인트로 대체: {message}",
|
|
7
|
-
"agent.log.gotPermReply": "휴대폰에서 권한 응답 수신 (id={id} {reply} {version})",
|
|
8
|
-
"agent.log.gotQuestionReply": "휴대폰에서 질문 응답 수신 (id={id} {status} {version})",
|
|
9
|
-
"agent.log.handleFailed": "{type} 처리 실패: {message}",
|
|
10
|
-
"agent.log.msgOk": "세션 메시지 조회 성공 session={session} data={count} 방식={limited} win={win} ms={ms}",
|
|
11
|
-
"agent.log.msgFailed": "세션 메시지 조회 실패 session={session} err={err} ms={ms}",
|
|
12
|
-
"agent.log.msgLimitFallback": "이 opencode는 limit 미지원 → 전체 조회로 폴백 (session={session})",
|
|
13
|
-
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
-
"agent.log.pendingResent": "session.pending: {session} 보류 요청 {count}건 재전송",
|
|
15
|
-
"agent.log.unhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
16
|
-
"events.log.fwdPermission": "권한 요청을 휴대폰으로 전달 (id={id} tool={tool} {version})",
|
|
17
|
-
"events.log.sessionDeleted": "session.deleted를 휴대폰으로 전달 (session={session})",
|
|
18
|
-
"events.log.permissionReplied": "opencode 응답 permission.replied (id={id} {response})",
|
|
19
|
-
"events.log.questionRejected": "opencode 응답 question.rejected (id={id})",
|
|
20
|
-
"events.log.questionReplied": "opencode 응답 question.replied (id={id})",
|
|
21
|
-
"index.error.connectRelay": "릴레이에 연결할 수 없습니다. 릴레이 주소를 확인한 후 다시 시도하세요",
|
|
22
|
-
"index.error.pairTimeout": "페어링 코드 대기 시간 초과(릴레이가 응답하지 않음)",
|
|
23
|
-
"index.log.claimed": "휴대폰 계정에 연결되었습니다. 이제 휴대폰은 「내 PC」에서 직접 연결하며 다시 스캔할 필요가 없습니다",
|
|
24
|
-
"index.log.connectedRelay": "릴레이에 연결됨 {url}",
|
|
25
|
-
"index.log.loaded": "tunnelbox opencode 플러그인을 시작했습니다(v{version})",
|
|
26
|
-
"index.log.disconnected": "릴레이 연결이 끊겨 자동으로 재연결 중…",
|
|
27
|
-
"index.log.exit": "종료됨",
|
|
28
|
-
"index.log.pairCode": "페어링 코드 생성: {code}",
|
|
29
|
-
"index.log.pairingStillClaimed": "이 페어링 코드는 같은 계정의 새 휴대폰 재연결 전용입니다. 이 PC는 이미 연결되어 휴대폰의 '내 컴퓨터'에서 계속 접속할 수 있습니다.",
|
|
30
|
-
"index.log.pairingPreparing": "릴레이에 연결하여 페어링 코드를 생성하는 중입니다…",
|
|
31
|
-
"index.log.permissionToPhone": "권한 요청 → 휴대폰 승인 (id={id} tool={tool})",
|
|
32
|
-
"index.log.permissionTuiFallback": "앱 오프라인, 권한 요청은 opencode TUI가 처리 (id={id} tool={tool})",
|
|
33
|
-
"index.log.relayError": "릴레이 오류: {msg}",
|
|
34
|
-
"index.log.resetIdentity": "계정에서 해제되어 ID를 재설정하고 새 페어링 코드를 생성합니다…",
|
|
35
|
-
"index.log.unknown": "알 수 없음",
|
|
36
|
-
"install.codeLine": "페어링 코드: {code}",
|
|
37
|
-
"install.commandInstalled": "명령 설치됨: {path}",
|
|
38
|
-
"install.done": "완료. 릴레이에 연결해 이 PC의 페어링 정보를 출력합니다:",
|
|
39
|
-
"install.failConnect": "(페어링 정보를 출력하려고 릴레이에 즉시 연결하지 못했습니다 — 릴레이에 연결할 수 없거나 Node 버전이 너무 오래됐습니다.",
|
|
40
|
-
"install.failConnectHint": "opencode를 다시 시작한 뒤 --print-logs로 터미널 QR 코드를 확인하거나, opencode 안에서 “휴대폰 페어링 코드 표시” 또는 /pair를 입력하세요.)",
|
|
41
|
-
"install.hintFresh": "참고: 페어링 코드는 일회용이며 약 10분간 유효합니다. 나중에 opencode를 시작한다면 시작 시 출력되거나 /pair로 받은 최신 정보를 사용하세요.",
|
|
42
|
-
"install.pluginInstalled": "플러그인 설치됨: {path}",
|
|
43
|
-
"install.qrUnavailable": "(QR 코드를 표시할 수 없습니다 — 위의 페어링 코드를 사용하세요)",
|
|
44
|
-
"install.qrcodeEnsure": "qrcode를 opencode 설정 디렉터리에 설치하는 중…",
|
|
45
|
-
"install.qrcodeFail": "qrcode 설치 실패(사용에는 영향이 없으며 페어링 코드만 표시됩니다): {err}",
|
|
46
|
-
"install.relayError": "릴레이 오류 응답: {msg}",
|
|
47
|
-
"install.scanHint": "휴대폰에서 tunnelbox 앱 “스캔하여 연결”을 열고 위 QR 코드를 스캔하여 연결하세요:",
|
|
48
|
-
"pair.heading": "tunnelbox 휴대폰 페어링",
|
|
49
|
-
"pair.howTo": "휴대폰에서 tunnelbox 앱을 열고 “스캔하여 연결”로 위 QR 코드를 스캔하거나 페어링 코드를 직접 입력하세요.",
|
|
50
|
-
"pair.oneTime": "페어링 코드는
|
|
51
|
-
"pair.promptBody": "이 PC의 휴대폰 원격 페어링 정보를 보여주세요: 페어링 코드와 스캔할 수 있는 QR 코드. QR 코드는 고정폭 코드 블록에 넣고 한 글자도 바꾸지 말고 그대로 표시해 주세요. 휴대폰으로 스캔할 수 있도록 하기 위함입니다.",
|
|
52
|
-
"pair.promptDescription": "휴대폰 원격 페어링의 페어링 코드·스캔용 QR 코드 표시",
|
|
53
|
-
"pair.scanIntro": "**스캔으로 연결**: 휴대폰에서 tunnelbox 앱 “스캔하여 연결”을 열고 아래 QR 코드를 스캔하면 자동으로 연결됩니다.",
|
|
54
|
-
"perm.promptAuthorize": "opencode가 권한을 요청합니다",
|
|
55
|
-
"perm.promptPatterns": "opencode가 접근을 요청: {list}",
|
|
56
|
-
"perm.promptResource": "opencode가 리소스 접근을 요청: {list}",
|
|
57
|
-
"perm.promptTool": "opencode가 {tool} 실행을 요청",
|
|
58
|
-
"qr.codeLabel": "페어링 코드",
|
|
59
|
-
"qr.fileWritten": "페어링 정보가 기록됨: {path}",
|
|
60
|
-
"qr.openHint": "tunnelbox 앱을 열고 위 QR 코드를 스캔하거나, 앱에서 페어링 코드를 직접 입력하세요.",
|
|
61
|
-
"qr.titleNoType": "tunnelbox 휴대폰 페어링",
|
|
62
|
-
"qr.titleWithType": "tunnelbox {type} 휴대폰 페어링",
|
|
63
|
-
"qr.unavailable": "(qrcode가 설치되지 않음 — 위의 페어링 코드를 사용하세요)",
|
|
64
|
-
"claude.errBusy": "이 세션이 실행 중입니다. 완료될 때까지 기다리거나 먼저 중지하세요",
|
|
65
|
-
"claude.errTurn": "생성 오류",
|
|
66
|
-
"claude.pairingStillClaimed": "이미 계정에 연결되어 있습니다. 이 코드는 같은 계정의 새 기기 연결 전용이며, 현재 기기는 '내 컴퓨터'에서 직접 연결할 수 있습니다",
|
|
67
|
-
"claude.pairForced": "--pair: 페어링 코드를 강제 요청했습니다(이번 실행만)",
|
|
68
|
-
"claude.pairUnclaimed": "연결된 계정을 감지하지 못했습니다. 페어링 안내를 시작합니다:",
|
|
69
|
-
"claude.claimedHint": "휴대폰 계정에 연결됨: 휴대폰의 '내 컴퓨터'에서 직접 연결하세요",
|
|
70
|
-
"claude.errStartFailed": "시작 실패:",
|
|
71
|
-
"claude.msgStarted": "Claude Code 어댑터가 시작되었습니다(Ctrl+C로 종료)",
|
|
72
|
-
"claude.warnInvalidMode": "잘못된 TUNNELBOX_CLAUDE_MODE 무시: {raw}(허용 {list})",
|
|
73
|
-
"claude.warnInvalidThinking": "잘못된 TUNNELBOX_CLAUDE_THINKING 무시: {raw}(off|adaptive|enabled[:budget])",
|
|
74
|
-
"claude.cmdNew": "새 세션",
|
|
75
|
-
"claude.cmdHelp": "도움말 보기",
|
|
76
|
-
"claude.errNoRelay": "릴레이 URL이 설정되지 않았습니다: --env로 기본값을 주입하거나 실행 시 TUNNELBOX_RELAY_URL로 덮어쓰세요",
|
|
77
|
-
"claude.logConnected": "릴레이 {url}에 연결됨",
|
|
78
|
-
"claude.logMsgUncaught": "메시지 처리 중 처리되지 않은 예외: {message}",
|
|
79
|
-
"claude.reasonDisconnect": "릴레이 연결 끊김(fail-closed 자동 거부)",
|
|
80
|
-
"claude.reasonUnbind": "계정 연결 해제(fail-closed 자동 거부)",
|
|
81
|
-
"claude.logDisconnected": "릴레이 연결이 끊어져 자동 재연결 중…",
|
|
82
|
-
"claude.logPairCode": "페어링 코드 생성: {code}",
|
|
83
|
-
"claude.logUnhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
84
|
-
"claude.logHandleFailed": "{type} 처리 실패: {message}",
|
|
85
|
-
"claude.newSessionTitle": "새 세션",
|
|
86
|
-
"claude.helpText": "지원 명령:\n- /new 새 세션\n- /help 도움말 보기",
|
|
87
|
-
"claude.logPromptFailed": "session.prompt 실패: {message}",
|
|
88
|
-
"claude.logAbortSent": "중지 전송됨 (session={session})",
|
|
89
|
-
"claude.logAbortFailed": "중지 실패 (session={session}): {message}",
|
|
90
|
-
"claude.errBadWorkspaceEmpty": "작업 영역 경로가 없습니다",
|
|
91
|
-
"claude.errBadWorkspaceNotDir": "디렉터리가 없거나 사용할 수 없습니다",
|
|
92
|
-
"claude.logWorkspaceSwitched": "작업 영역 전환: {path}",
|
|
93
|
-
"claude.logUnknownQuestionReply": "일치하지 않는 구조화 질문 응답 (id={id})",
|
|
94
|
-
"claude.logFlushedQuestions": "대기 중 질문 {count}개 취소: {reason}",
|
|
95
|
-
"claude.logFlushedApprovals": "대기 중 요청 {count}개 거부: {reason}",
|
|
96
|
-
"claude.logPendingResent": "session.pending: {session}의 대기 항목 {count}개 재전송",
|
|
97
|
-
"claude.logSetModeFailed": "setPermissionMode 실패 (session={session}): {message}",
|
|
98
|
-
"claude.errWorkspaceMissing": "작업 영역이 없습니다: {dir}",
|
|
99
|
-
"claude.logSessionError": "세션 오류 (session={session}): {message}",
|
|
100
|
-
"claude.logOfflineDenyTool": "릴레이 오프라인, 도구 {tool} 자동 거부",
|
|
101
|
-
"claude.errOfflineDeny": "릴레이 오프라인, 자동 거부(fail-closed)",
|
|
102
|
-
"claude.logAuqDisabled": "AskUserQuestion 비활성화됨(TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), 자동 거부",
|
|
103
|
-
"claude.errAuqDisabled": "AskUserQuestion이 활성화되지 않았습니다",
|
|
104
|
-
"claude.logAuqParseFailed": "AskUserQuestion 입력 구문 분석 실패, 자동 거부(fail-closed)",
|
|
105
|
-
"claude.errAuqParse": "질문을 구문 분석할 수 없습니다",
|
|
106
|
-
"claude.logAuqSkipped": "AskUserQuestion 무응답/취소됨 (session={session})",
|
|
107
|
-
"claude.errAuqCancelled": "사용자가 선택하지 않음(취소됨)",
|
|
108
|
-
"claude.logAuqDone": "AskUserQuestion 답변 완료 (session={session})",
|
|
109
|
-
"claude.promptRunTool": "Claude Code가 {tool} 실행을 요청",
|
|
110
|
-
"claude.errApprovalTimeout": "승인 시간 초과, 자동 거부(fail-closed)",
|
|
111
|
-
"claude.errUserDenied": "사용자가 거부",
|
|
112
|
-
"claude.errAborted": "요청이 중단되었습니다",
|
|
113
|
-
"claude.logPermToPhone": "권한 요청(tool={tool}) → 휴대폰으로 전송 permissionID={id}",
|
|
114
|
-
"claude.errRelayUnreachable": "릴레이에 연결할 수 없음, 자동 거부(fail-closed)",
|
|
115
|
-
"claude.logQuestionOffline": "릴레이 오프라인, 구조화 질문 자동 취소",
|
|
116
|
-
"claude.logQuestionToPhone": "구조화 질문({count}개) → 휴대폰으로 전송 questionID={id}",
|
|
117
|
-
"claude.logDialogOffline": "릴레이 오프라인, 대화 상자 자동 취소({tool})",
|
|
118
|
-
"claude.logDialogToPhone": "대화 상자 요청(kind={kind} tool={tool}) → 휴대폰으로 전송 permissionID={id}",
|
|
119
|
-
"claude.logAuqDialogParse": "AskUserQuestion 페이로드 구문 분석 실패, 기본 동작 유지(session={session})",
|
|
120
|
-
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) 매핑 없음, 기본 동작 유지(session={session})",
|
|
121
|
-
"claude.promptMcpAuth": "MCP \"{server}\" 인증 요청",
|
|
122
|
-
"claude.logElicitUnmapped": "MCP elicitation(server={server}, mode={mode}) 미처리, 자동 거부(session={session})",
|
|
123
|
-
"claude.logResetIdentity": "계정 연결이 해제되었습니다. ID를 재설정하고 새 페어링 코드를 생성하는 중…",
|
|
124
|
-
"claude.dialogConfirm": "Claude Code가 확인을 요청({kind})",
|
|
125
|
-
"claude.resultTruncated": "…(결과가 너무 길어 잘림)",
|
|
126
|
-
"claude.streamError": "claude 스트리밍 오류",
|
|
127
|
-
"claude.errListSessions": "Claude 세션 목록을 읽지 못했습니다",
|
|
128
|
-
"claude.errReadHistory": "세션 기록을 읽지 못했습니다({id})",
|
|
129
|
-
"setup.langSet": "실행 언어를 설정했습니다",
|
|
130
|
-
"setup.langHint": "다시 시작하면 이 언어로 출력됩니다(실행 시 TUNNELBOX_LANG으로 재정의 가능). 상태 파일:",
|
|
131
|
-
"setup.langCurrent": "현재 실행 언어",
|
|
132
|
-
"hermes.errNoRelay": "릴레이 URL이 설정되지 않았습니다: --env로 기본값을 주입하거나 실행 시 TUNNELBOX_RELAY_URL로 재정의하세요",
|
|
133
|
-
"hermes.logConnected": "릴레이에 연결됨 {url}",
|
|
134
|
-
"hermes.logMsgUncaught": "메시지 처리 중 처리되지 않은 예외: {message}",
|
|
135
|
-
"hermes.logDisconnected": "릴레이와 연결 끊김, 자동 재연결 중…",
|
|
136
|
-
"hermes.logPairCode": "페어링 코드 생성: {code}",
|
|
137
|
-
"hermes.logUnhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
138
|
-
"hermes.logHandleFailed": "{type} 처리 실패: {message}",
|
|
139
|
-
"hermes.logClaimed": "휴대폰 계정에 바인딩됨. 이제 휴대폰의 '내 컴퓨터'에서 직접 연결합니다",
|
|
140
|
-
"hermes.logResetIdentity": "계정에서 바인딩 해제됨, ID 재설정 및 새 페어링 코드 생성 중…",
|
|
141
|
-
"hermes.cmdNew": "새 세션",
|
|
142
|
-
"hermes.cmdHelp": "도움말 표시",
|
|
143
|
-
"hermes.newSessionTitle": "새 세션",
|
|
144
|
-
"hermes.helpText": "지원 명령:\n- /new 새 세션\n- /help 도움말 표시",
|
|
145
|
-
"hermes.errBusy": "이 세션이 생성 중입니다. 완료를 기다리거나 먼저 중지하세요",
|
|
146
|
-
"hermes.errBadWorkspace": "이 디렉토리는 존재하지 않거나 사용할 수 없습니다",
|
|
147
|
-
"hermes.logWorkspaceSwitched": "작업공간 전환: {path}",
|
|
148
|
-
"hermes.errWorkspaceMissing": "작업공간이 없습니다: {dir}",
|
|
149
|
-
"hermes.errStartFailed": "시작 실패: {message}",
|
|
150
|
-
"hermes.msgStarted": "Hermes 어댑터 시작됨 (Ctrl+C로 종료)",
|
|
151
|
-
"hermes.logAbortSent": "중지 전송됨 (session={session})",
|
|
152
|
-
"hermes.logPromptFailed": "session.prompt 실패: {message}",
|
|
153
|
-
"hermes.logTurnError": "턴 오류 (session={session}): {message}",
|
|
154
|
-
"hermes.logPairForced": "--pair: 페어링 코드 강제 요청 (이번에만)",
|
|
155
|
-
"hermes.pairingStillClaimed": "휴대폰 계정에 이미 바인딩됨: 이 코드는 같은 계정의 새 기기 재페어링용입니다. 현재 기기는 휴대폰의 '내 컴퓨터'에서 직접 연결할 수 있습니다",
|
|
156
|
-
"hermes.logPairNoRelay": "릴레이 URL이 설정되지 않아 페어링 코드를 요청할 수 없습니다",
|
|
157
|
-
"hermes.errSpawnHermes": "Hermes({bin})를 시작할 수 없습니다: 설치 여부를 확인하세요 ({err})",
|
|
158
|
-
"hermes.errHermesExit": "hermes 종료({code}): {err}",
|
|
159
|
-
"hermes.logSessionUpdated": "세션 업데이트됨 (session={session})",
|
|
160
|
-
"hermes.errNoInject": "휴대폰 메시지 주입을 사용할 수 없습니다(비대화형 세션 또는 프로세스 미준비)",
|
|
161
|
-
"hermes.pairNoRelay": "릴레이에 연결할 수 없습니다(릴레이 도달 불가 또는 websockets 누락)",
|
|
162
|
-
"hermes.pairTimeout": "페어링 코드 요청 시간 초과(릴레이 미응답)",
|
|
163
|
-
"hermes.errToolPair": "tunnelbox_pair 실패: {err}",
|
|
164
|
-
"hermes.errToolStatus": "tunnelbox_status 실패: {err}",
|
|
165
|
-
"hermes.cliUsage": "사용법: /tunnelbox <pair|status>\n pair 휴대폰 페어링 코드 요청/출력\n status 릴레이/바인딩/연결 상태 표시"
|
|
166
|
-
|
|
1
|
+
{
|
|
2
|
+
"agent.err.createSession": "세션 생성 실패",
|
|
3
|
+
"agent.err.httpClient": "opencode HTTP client에 접근할 수 없습니다",
|
|
4
|
+
"agent.err.unknownPerm": "알 수 없는 권한 요청: {id}",
|
|
5
|
+
"agent.err.unknownQuestion": "알 수 없는 질문 요청: {id}",
|
|
6
|
+
"agent.log.fallback404": "선호 엔드포인트가 404를 반환해 다른 엔드포인트로 대체: {message}",
|
|
7
|
+
"agent.log.gotPermReply": "휴대폰에서 권한 응답 수신 (id={id} {reply} {version})",
|
|
8
|
+
"agent.log.gotQuestionReply": "휴대폰에서 질문 응답 수신 (id={id} {status} {version})",
|
|
9
|
+
"agent.log.handleFailed": "{type} 처리 실패: {message}",
|
|
10
|
+
"agent.log.msgOk": "세션 메시지 조회 성공 session={session} data={count} 방식={limited} win={win} ms={ms}",
|
|
11
|
+
"agent.log.msgFailed": "세션 메시지 조회 실패 session={session} err={err} ms={ms}",
|
|
12
|
+
"agent.log.msgLimitFallback": "이 opencode는 limit 미지원 → 전체 조회로 폴백 (session={session})",
|
|
13
|
+
"agent.log.httpOk": "opencode HTTP {status} {path}",
|
|
14
|
+
"agent.log.pendingResent": "session.pending: {session} 보류 요청 {count}건 재전송",
|
|
15
|
+
"agent.log.unhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
16
|
+
"events.log.fwdPermission": "권한 요청을 휴대폰으로 전달 (id={id} tool={tool} {version})",
|
|
17
|
+
"events.log.sessionDeleted": "session.deleted를 휴대폰으로 전달 (session={session})",
|
|
18
|
+
"events.log.permissionReplied": "opencode 응답 permission.replied (id={id} {response})",
|
|
19
|
+
"events.log.questionRejected": "opencode 응답 question.rejected (id={id})",
|
|
20
|
+
"events.log.questionReplied": "opencode 응답 question.replied (id={id})",
|
|
21
|
+
"index.error.connectRelay": "릴레이에 연결할 수 없습니다. 릴레이 주소를 확인한 후 다시 시도하세요",
|
|
22
|
+
"index.error.pairTimeout": "페어링 코드 대기 시간 초과(릴레이가 응답하지 않음)",
|
|
23
|
+
"index.log.claimed": "휴대폰 계정에 연결되었습니다. 이제 휴대폰은 「내 PC」에서 직접 연결하며 다시 스캔할 필요가 없습니다",
|
|
24
|
+
"index.log.connectedRelay": "릴레이에 연결됨 {url}",
|
|
25
|
+
"index.log.loaded": "tunnelbox opencode 플러그인을 시작했습니다(v{version})",
|
|
26
|
+
"index.log.disconnected": "릴레이 연결이 끊겨 자동으로 재연결 중…",
|
|
27
|
+
"index.log.exit": "종료됨",
|
|
28
|
+
"index.log.pairCode": "페어링 코드 생성: {code}",
|
|
29
|
+
"index.log.pairingStillClaimed": "이 페어링 코드는 같은 계정의 새 휴대폰 재연결 전용입니다. 이 PC는 이미 연결되어 휴대폰의 '내 컴퓨터'에서 계속 접속할 수 있습니다.",
|
|
30
|
+
"index.log.pairingPreparing": "릴레이에 연결하여 페어링 코드를 생성하는 중입니다…",
|
|
31
|
+
"index.log.permissionToPhone": "권한 요청 → 휴대폰 승인 (id={id} tool={tool})",
|
|
32
|
+
"index.log.permissionTuiFallback": "앱 오프라인, 권한 요청은 opencode TUI가 처리 (id={id} tool={tool})",
|
|
33
|
+
"index.log.relayError": "릴레이 오류: {msg}",
|
|
34
|
+
"index.log.resetIdentity": "계정에서 해제되어 ID를 재설정하고 새 페어링 코드를 생성합니다…",
|
|
35
|
+
"index.log.unknown": "알 수 없음",
|
|
36
|
+
"install.codeLine": "페어링 코드: {code}",
|
|
37
|
+
"install.commandInstalled": "명령 설치됨: {path}",
|
|
38
|
+
"install.done": "완료. 릴레이에 연결해 이 PC의 페어링 정보를 출력합니다:",
|
|
39
|
+
"install.failConnect": "(페어링 정보를 출력하려고 릴레이에 즉시 연결하지 못했습니다 — 릴레이에 연결할 수 없거나 Node 버전이 너무 오래됐습니다.",
|
|
40
|
+
"install.failConnectHint": "opencode를 다시 시작한 뒤 --print-logs로 터미널 QR 코드를 확인하거나, opencode 안에서 “휴대폰 페어링 코드 표시” 또는 /pair를 입력하세요.)",
|
|
41
|
+
"install.hintFresh": "참고: 페어링 코드는 일회용이며 약 10분간 유효합니다. 나중에 opencode를 시작한다면 시작 시 출력되거나 /pair로 받은 최신 정보를 사용하세요.",
|
|
42
|
+
"install.pluginInstalled": "플러그인 설치됨: {path}",
|
|
43
|
+
"install.qrUnavailable": "(QR 코드를 표시할 수 없습니다 — 위의 페어링 코드를 사용하세요)",
|
|
44
|
+
"install.qrcodeEnsure": "qrcode를 opencode 설정 디렉터리에 설치하는 중…",
|
|
45
|
+
"install.qrcodeFail": "qrcode 설치 실패(사용에는 영향이 없으며 페어링 코드만 표시됩니다): {err}",
|
|
46
|
+
"install.relayError": "릴레이 오류 응답: {msg}",
|
|
47
|
+
"install.scanHint": "휴대폰에서 tunnelbox 앱 “스캔하여 연결”을 열고 위 QR 코드를 스캔하여 연결하세요:",
|
|
48
|
+
"pair.heading": "tunnelbox 휴대폰 페어링",
|
|
49
|
+
"pair.howTo": "휴대폰에서 tunnelbox 앱을 열고 “스캔하여 연결”로 위 QR 코드를 스캔하거나 페어링 코드를 직접 입력하세요.",
|
|
50
|
+
"pair.oneTime": "페어링 코드는 1회용이며 약 10분간 유효합니다. 사용하거나 만료되면 무효가 됩니다. 새 코드가 필요하면 \"페어링 코드 새로 고침\"을 요청하세요.",
|
|
51
|
+
"pair.promptBody": "이 PC의 휴대폰 원격 페어링 정보를 보여주세요: 페어링 코드와 스캔할 수 있는 QR 코드. QR 코드는 고정폭 코드 블록에 넣고 한 글자도 바꾸지 말고 그대로 표시해 주세요. 휴대폰으로 스캔할 수 있도록 하기 위함입니다.",
|
|
52
|
+
"pair.promptDescription": "휴대폰 원격 페어링의 페어링 코드·스캔용 QR 코드 표시",
|
|
53
|
+
"pair.scanIntro": "**스캔으로 연결**: 휴대폰에서 tunnelbox 앱 “스캔하여 연결”을 열고 아래 QR 코드를 스캔하면 자동으로 연결됩니다.",
|
|
54
|
+
"perm.promptAuthorize": "opencode가 권한을 요청합니다",
|
|
55
|
+
"perm.promptPatterns": "opencode가 접근을 요청: {list}",
|
|
56
|
+
"perm.promptResource": "opencode가 리소스 접근을 요청: {list}",
|
|
57
|
+
"perm.promptTool": "opencode가 {tool} 실행을 요청",
|
|
58
|
+
"qr.codeLabel": "페어링 코드",
|
|
59
|
+
"qr.fileWritten": "페어링 정보가 기록됨: {path}",
|
|
60
|
+
"qr.openHint": "tunnelbox 앱을 열고 위 QR 코드를 스캔하거나, 앱에서 페어링 코드를 직접 입력하세요.",
|
|
61
|
+
"qr.titleNoType": "tunnelbox 휴대폰 페어링",
|
|
62
|
+
"qr.titleWithType": "tunnelbox {type} 휴대폰 페어링",
|
|
63
|
+
"qr.unavailable": "(qrcode가 설치되지 않음 — 위의 페어링 코드를 사용하세요)",
|
|
64
|
+
"claude.errBusy": "이 세션이 실행 중입니다. 완료될 때까지 기다리거나 먼저 중지하세요",
|
|
65
|
+
"claude.errTurn": "생성 오류",
|
|
66
|
+
"claude.pairingStillClaimed": "이미 계정에 연결되어 있습니다. 이 코드는 같은 계정의 새 기기 연결 전용이며, 현재 기기는 '내 컴퓨터'에서 직접 연결할 수 있습니다",
|
|
67
|
+
"claude.pairForced": "--pair: 페어링 코드를 강제 요청했습니다(이번 실행만)",
|
|
68
|
+
"claude.pairUnclaimed": "연결된 계정을 감지하지 못했습니다. 페어링 안내를 시작합니다:",
|
|
69
|
+
"claude.claimedHint": "휴대폰 계정에 연결됨: 휴대폰의 '내 컴퓨터'에서 직접 연결하세요",
|
|
70
|
+
"claude.errStartFailed": "시작 실패:",
|
|
71
|
+
"claude.msgStarted": "Claude Code 어댑터가 시작되었습니다(Ctrl+C로 종료)",
|
|
72
|
+
"claude.warnInvalidMode": "잘못된 TUNNELBOX_CLAUDE_MODE 무시: {raw}(허용 {list})",
|
|
73
|
+
"claude.warnInvalidThinking": "잘못된 TUNNELBOX_CLAUDE_THINKING 무시: {raw}(off|adaptive|enabled[:budget])",
|
|
74
|
+
"claude.cmdNew": "새 세션",
|
|
75
|
+
"claude.cmdHelp": "도움말 보기",
|
|
76
|
+
"claude.errNoRelay": "릴레이 URL이 설정되지 않았습니다: --env로 기본값을 주입하거나 실행 시 TUNNELBOX_RELAY_URL로 덮어쓰세요",
|
|
77
|
+
"claude.logConnected": "릴레이 {url}에 연결됨",
|
|
78
|
+
"claude.logMsgUncaught": "메시지 처리 중 처리되지 않은 예외: {message}",
|
|
79
|
+
"claude.reasonDisconnect": "릴레이 연결 끊김(fail-closed 자동 거부)",
|
|
80
|
+
"claude.reasonUnbind": "계정 연결 해제(fail-closed 자동 거부)",
|
|
81
|
+
"claude.logDisconnected": "릴레이 연결이 끊어져 자동 재연결 중…",
|
|
82
|
+
"claude.logPairCode": "페어링 코드 생성: {code}",
|
|
83
|
+
"claude.logUnhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
84
|
+
"claude.logHandleFailed": "{type} 처리 실패: {message}",
|
|
85
|
+
"claude.newSessionTitle": "새 세션",
|
|
86
|
+
"claude.helpText": "지원 명령:\n- /new 새 세션\n- /help 도움말 보기",
|
|
87
|
+
"claude.logPromptFailed": "session.prompt 실패: {message}",
|
|
88
|
+
"claude.logAbortSent": "중지 전송됨 (session={session})",
|
|
89
|
+
"claude.logAbortFailed": "중지 실패 (session={session}): {message}",
|
|
90
|
+
"claude.errBadWorkspaceEmpty": "작업 영역 경로가 없습니다",
|
|
91
|
+
"claude.errBadWorkspaceNotDir": "디렉터리가 없거나 사용할 수 없습니다",
|
|
92
|
+
"claude.logWorkspaceSwitched": "작업 영역 전환: {path}",
|
|
93
|
+
"claude.logUnknownQuestionReply": "일치하지 않는 구조화 질문 응답 (id={id})",
|
|
94
|
+
"claude.logFlushedQuestions": "대기 중 질문 {count}개 취소: {reason}",
|
|
95
|
+
"claude.logFlushedApprovals": "대기 중 요청 {count}개 거부: {reason}",
|
|
96
|
+
"claude.logPendingResent": "session.pending: {session}의 대기 항목 {count}개 재전송",
|
|
97
|
+
"claude.logSetModeFailed": "setPermissionMode 실패 (session={session}): {message}",
|
|
98
|
+
"claude.errWorkspaceMissing": "작업 영역이 없습니다: {dir}",
|
|
99
|
+
"claude.logSessionError": "세션 오류 (session={session}): {message}",
|
|
100
|
+
"claude.logOfflineDenyTool": "릴레이 오프라인, 도구 {tool} 자동 거부",
|
|
101
|
+
"claude.errOfflineDeny": "릴레이 오프라인, 자동 거부(fail-closed)",
|
|
102
|
+
"claude.logAuqDisabled": "AskUserQuestion 비활성화됨(TUNNELBOX_CLAUDE_ASK_USER_QUESTION=0), 자동 거부",
|
|
103
|
+
"claude.errAuqDisabled": "AskUserQuestion이 활성화되지 않았습니다",
|
|
104
|
+
"claude.logAuqParseFailed": "AskUserQuestion 입력 구문 분석 실패, 자동 거부(fail-closed)",
|
|
105
|
+
"claude.errAuqParse": "질문을 구문 분석할 수 없습니다",
|
|
106
|
+
"claude.logAuqSkipped": "AskUserQuestion 무응답/취소됨 (session={session})",
|
|
107
|
+
"claude.errAuqCancelled": "사용자가 선택하지 않음(취소됨)",
|
|
108
|
+
"claude.logAuqDone": "AskUserQuestion 답변 완료 (session={session})",
|
|
109
|
+
"claude.promptRunTool": "Claude Code가 {tool} 실행을 요청",
|
|
110
|
+
"claude.errApprovalTimeout": "승인 시간 초과, 자동 거부(fail-closed)",
|
|
111
|
+
"claude.errUserDenied": "사용자가 거부",
|
|
112
|
+
"claude.errAborted": "요청이 중단되었습니다",
|
|
113
|
+
"claude.logPermToPhone": "권한 요청(tool={tool}) → 휴대폰으로 전송 permissionID={id}",
|
|
114
|
+
"claude.errRelayUnreachable": "릴레이에 연결할 수 없음, 자동 거부(fail-closed)",
|
|
115
|
+
"claude.logQuestionOffline": "릴레이 오프라인, 구조화 질문 자동 취소",
|
|
116
|
+
"claude.logQuestionToPhone": "구조화 질문({count}개) → 휴대폰으로 전송 questionID={id}",
|
|
117
|
+
"claude.logDialogOffline": "릴레이 오프라인, 대화 상자 자동 취소({tool})",
|
|
118
|
+
"claude.logDialogToPhone": "대화 상자 요청(kind={kind} tool={tool}) → 휴대폰으로 전송 permissionID={id}",
|
|
119
|
+
"claude.logAuqDialogParse": "AskUserQuestion 페이로드 구문 분석 실패, 기본 동작 유지(session={session})",
|
|
120
|
+
"claude.logDialogUnmapped": "request_user_dialog(kind={kind}) 매핑 없음, 기본 동작 유지(session={session})",
|
|
121
|
+
"claude.promptMcpAuth": "MCP \"{server}\" 인증 요청",
|
|
122
|
+
"claude.logElicitUnmapped": "MCP elicitation(server={server}, mode={mode}) 미처리, 자동 거부(session={session})",
|
|
123
|
+
"claude.logResetIdentity": "계정 연결이 해제되었습니다. ID를 재설정하고 새 페어링 코드를 생성하는 중…",
|
|
124
|
+
"claude.dialogConfirm": "Claude Code가 확인을 요청({kind})",
|
|
125
|
+
"claude.resultTruncated": "…(결과가 너무 길어 잘림)",
|
|
126
|
+
"claude.streamError": "claude 스트리밍 오류",
|
|
127
|
+
"claude.errListSessions": "Claude 세션 목록을 읽지 못했습니다",
|
|
128
|
+
"claude.errReadHistory": "세션 기록을 읽지 못했습니다({id})",
|
|
129
|
+
"setup.langSet": "실행 언어를 설정했습니다",
|
|
130
|
+
"setup.langHint": "다시 시작하면 이 언어로 출력됩니다(실행 시 TUNNELBOX_LANG으로 재정의 가능). 상태 파일:",
|
|
131
|
+
"setup.langCurrent": "현재 실행 언어",
|
|
132
|
+
"hermes.errNoRelay": "릴레이 URL이 설정되지 않았습니다: --env로 기본값을 주입하거나 실행 시 TUNNELBOX_RELAY_URL로 재정의하세요",
|
|
133
|
+
"hermes.logConnected": "릴레이에 연결됨 {url}",
|
|
134
|
+
"hermes.logMsgUncaught": "메시지 처리 중 처리되지 않은 예외: {message}",
|
|
135
|
+
"hermes.logDisconnected": "릴레이와 연결 끊김, 자동 재연결 중…",
|
|
136
|
+
"hermes.logPairCode": "페어링 코드 생성: {code}",
|
|
137
|
+
"hermes.logUnhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
138
|
+
"hermes.logHandleFailed": "{type} 처리 실패: {message}",
|
|
139
|
+
"hermes.logClaimed": "휴대폰 계정에 바인딩됨. 이제 휴대폰의 '내 컴퓨터'에서 직접 연결합니다",
|
|
140
|
+
"hermes.logResetIdentity": "계정에서 바인딩 해제됨, ID 재설정 및 새 페어링 코드 생성 중…",
|
|
141
|
+
"hermes.cmdNew": "새 세션",
|
|
142
|
+
"hermes.cmdHelp": "도움말 표시",
|
|
143
|
+
"hermes.newSessionTitle": "새 세션",
|
|
144
|
+
"hermes.helpText": "지원 명령:\n- /new 새 세션\n- /help 도움말 표시",
|
|
145
|
+
"hermes.errBusy": "이 세션이 생성 중입니다. 완료를 기다리거나 먼저 중지하세요",
|
|
146
|
+
"hermes.errBadWorkspace": "이 디렉토리는 존재하지 않거나 사용할 수 없습니다",
|
|
147
|
+
"hermes.logWorkspaceSwitched": "작업공간 전환: {path}",
|
|
148
|
+
"hermes.errWorkspaceMissing": "작업공간이 없습니다: {dir}",
|
|
149
|
+
"hermes.errStartFailed": "시작 실패: {message}",
|
|
150
|
+
"hermes.msgStarted": "Hermes 어댑터 시작됨 (Ctrl+C로 종료)",
|
|
151
|
+
"hermes.logAbortSent": "중지 전송됨 (session={session})",
|
|
152
|
+
"hermes.logPromptFailed": "session.prompt 실패: {message}",
|
|
153
|
+
"hermes.logTurnError": "턴 오류 (session={session}): {message}",
|
|
154
|
+
"hermes.logPairForced": "--pair: 페어링 코드 강제 요청 (이번에만)",
|
|
155
|
+
"hermes.pairingStillClaimed": "휴대폰 계정에 이미 바인딩됨: 이 코드는 같은 계정의 새 기기 재페어링용입니다. 현재 기기는 휴대폰의 '내 컴퓨터'에서 직접 연결할 수 있습니다",
|
|
156
|
+
"hermes.logPairNoRelay": "릴레이 URL이 설정되지 않아 페어링 코드를 요청할 수 없습니다",
|
|
157
|
+
"hermes.errSpawnHermes": "Hermes({bin})를 시작할 수 없습니다: 설치 여부를 확인하세요 ({err})",
|
|
158
|
+
"hermes.errHermesExit": "hermes 종료({code}): {err}",
|
|
159
|
+
"hermes.logSessionUpdated": "세션 업데이트됨 (session={session})",
|
|
160
|
+
"hermes.errNoInject": "휴대폰 메시지 주입을 사용할 수 없습니다(비대화형 세션 또는 프로세스 미준비)",
|
|
161
|
+
"hermes.pairNoRelay": "릴레이에 연결할 수 없습니다(릴레이 도달 불가 또는 websockets 누락)",
|
|
162
|
+
"hermes.pairTimeout": "페어링 코드 요청 시간 초과(릴레이 미응답)",
|
|
163
|
+
"hermes.errToolPair": "tunnelbox_pair 실패: {err}",
|
|
164
|
+
"hermes.errToolStatus": "tunnelbox_status 실패: {err}",
|
|
165
|
+
"hermes.cliUsage": "사용법: /tunnelbox <pair|status>\n pair 휴대폰 페어링 코드 요청/출력\n status 릴레이/바인딩/연결 상태 표시",
|
|
166
|
+
"qr.validFor": "페어링 코드는 약 10분간 유효합니다. 만료되면 컴퓨터에서 새로 받으세요.",
|
|
167
|
+
"pair.toolDesc": "이 컴퓨터의 스마트폰 페어링 정보(페어링 코드와 스캔 가능한 QR 코드)를 표시합니다. 페어링, QR 코드 스캔, 스마트폰으로 이 컴퓨터 제어에 대해 물어볼 때 호출하세요.",
|
|
168
|
+
"pair.toolRefreshDesc": "릴레이에 새 페어링 코드를 요청할지 여부",
|
|
169
|
+
"state.errSaveState": "상태 저장 실패",
|
|
170
|
+
"adapter.logConnected": "릴레이에 연결됨 {url}",
|
|
171
|
+
"adapter.logDisconnected": "릴레이와 연결이 끊어졌습니다. 자동으로 재연결 중…",
|
|
172
|
+
"adapter.logPairCode": "페어링 코드 생성됨: {code}",
|
|
173
|
+
"adapter.logClaimed": "스마트폰 계정에 연결되었습니다. 이제부터 스마트폰의 '내 컴퓨터'에서 직접 연결합니다",
|
|
174
|
+
"adapter.logResetIdentity": "계정에서 해제되었습니다. ID를 재설정하고 새 페어링 코드를 생성 중…",
|
|
175
|
+
"adapter.logUnhandledType": "처리되지 않은 메시지 유형: {type}",
|
|
176
|
+
"adapter.errNoRelay": "릴레이 URL이 설정되지 않았습니다. 빌드 시 --env로 기본값을 주입하거나 런타임에 TUNNELBOX_RELAY_URL로 재정의하세요",
|
|
177
|
+
"adapter.errBusy": "이 세션이 아직 실행 중입니다. 완료를 기다리거나 먼저 중지하세요",
|
|
178
|
+
"adapter.errBadWorkspaceEmpty": "작업 공간 경로가 없습니다",
|
|
179
|
+
"adapter.errBadWorkspaceNotDir": "디렉터리가 없거나 사용할 수 없습니다",
|
|
180
|
+
"adapter.errWorkspaceMissing": "작업 공간이 존재하지 않습니다: {dir}",
|
|
181
|
+
"adapter.cmdNew": "새 세션",
|
|
182
|
+
"adapter.cmdHelp": "도움말 표시",
|
|
183
|
+
"adapter.helpText": "지원되는 명령:\n- /new 새 세션\n- /help 도움말 표시",
|
|
184
|
+
"adapter.newSessionTitle": "새 세션",
|
|
185
|
+
"install.langHelpTitle": "install-local 지원 언어(--lang <tag>):",
|
|
186
|
+
"install.langHelpExample": "예: npm run install-local -- --lang de-DE",
|
|
187
|
+
"install.unknownLang": "알 수 없는 언어 \"{raw}\"이므로 en-US로 대체합니다. 지원: {list}",
|
|
188
|
+
"hermes.errAskRequired": "question은 필수입니다",
|
|
189
|
+
"hermes.msgPhoneUnavailable": "스마트폰을 사용할 수 없거나 응답이 없습니다. 내장 clarify로 로컬에서 질문하거나 직접 판단하여 계속하세요.",
|
|
190
|
+
"hermes.errClarifyUnavailable": "clarify 지원을 사용할 수 없습니다",
|
|
191
|
+
"hermes.errAskFailed": "tunnelbox_ask 실패: {err}",
|
|
192
|
+
"hermes.errClarifyFailed": "clarify 실패: {err}",
|
|
193
|
+
"bin.denied": "스마트폰에서 거부됨",
|
|
194
|
+
"bin.timeout": "승인 시간 초과(fail-closed)",
|
|
195
|
+
"bin.reqRun": "Claude Code가 {tool} 실행을 요청합니다",
|
|
196
|
+
"bin.pairTitle": "tunnelbox 스마트폰 페어링",
|
|
197
|
+
"bin.pairCodeLine": " 페어링 코드: {code}",
|
|
198
|
+
"bin.pairHint": "tunnelbox 앱을 열고 '스캔하여 페어링'으로 QR 코드를 스캔하거나 페어링 코드를 직접 입력하세요(1회용).",
|
|
199
|
+
"bin.pairWritten": " 페어링 정보 저장됨: {path}",
|
|
200
|
+
"bin.pairRequestFailed": "릴레이에 페어링 코드 요청 실패.",
|
|
201
|
+
"bin.alreadyClaimed": "이 컴퓨터는 이미 스마트폰 계정에 연결되어 있습니다. 스마트폰의 '내 컴퓨터'에서 직접 연결하세요. 다시 페어링하려면 먼저 스마트폰에서 해제하세요.",
|
|
202
|
+
"bin.noRelay": "릴레이 URL이 설정되지 않았습니다. 환경 변수 TUNNELBOX_RELAY_URL을 설정한 후 다시 시도하세요.",
|
|
203
|
+
"bin.connectFailed": "릴레이에 연결할 수 없습니다: {relay}\nTUNNELBOX_RELAY_URL을 설정하거나 official-plugin 상태 파일에서 구성하세요.",
|
|
204
|
+
"bin.statusRelay": "릴레이: {value}",
|
|
205
|
+
"bin.statusAgent": "에이전트 ID: {value}",
|
|
206
|
+
"bin.statusClaimed": "스마트폰 연결: {value}",
|
|
207
|
+
"bin.statusStateFile": "상태 파일: {value}",
|
|
208
|
+
"bin.statusLatest": "최신 페어링 정보:",
|
|
209
|
+
"bin.usage": "사용법: tunnelbox <pair|status|ask>",
|
|
210
|
+
"bin.usagePair": " pair 스마트폰 페어링 코드 요청 및 출력",
|
|
211
|
+
"bin.usageStatus": " status 릴레이/연결 상태 표시",
|
|
212
|
+
"bin.usageAsk": " ask 도구 승인을 스마트폰으로 전달",
|
|
213
|
+
"adapter.logMsgUncaught": "메시지 처리 중 처리되지 않은 예외: {message}",
|
|
214
|
+
"adapter.logHandleFailed": "{type} 처리 실패: {message}",
|
|
215
|
+
"adapter.logPromptFailed": "session.prompt 실패: {message}",
|
|
216
|
+
"adapter.logAbortSent": "중단 전송됨 (session={session})",
|
|
217
|
+
"adapter.errUserDenied": "사용자가 거부함",
|
|
218
|
+
"adapter.logPendingResent": "session.pending: 보류 중인 요청 {count}건 재전송",
|
|
219
|
+
"adapter.logWorkspaceSwitched": "작업 공간 전환: {path}",
|
|
220
|
+
"adapter.logNewSession": "새 세션 저장됨 codexId={codexId} (alias={session})",
|
|
221
|
+
"adapter.logSessionError": "턴 오류 (session={session}): {message}",
|
|
222
|
+
"adapter.logDshSent": "dsh로 전송됨 (session={session})",
|
|
223
|
+
"adapter.logReadHistoryFailed": "세션 기록 읽기 실패({session}): {message}",
|
|
224
|
+
"adapter.logAnswererInitFailed": "응답자 초기화 실패: {message}",
|
|
225
|
+
"adapter.logRemoteMode": "양단 동시 표시 모드: 선택/승인은 typert 다중 클라이언트 브로드캐스트를 사용하며 스마트폰과 dsh web이 같은 화면을 공유하고 먼저 답한 쪽이 적용됩니다",
|
|
226
|
+
"adapter.logRemoteProbeFailed": "typert 원격 이벤트 소스 탐색 실패. 로컬 응답 모드로 대체합니다: {message}",
|
|
227
|
+
"adapter.logLocalMode": "로컬 응답 모드: 선택/승인은 스마트폰이 응답(headless, dsh web 브로드캐스트 없음)",
|
|
228
|
+
"adapter.logRemoteStreamInterrupted": "remote events 스트림 중단: {message}",
|
|
229
|
+
"adapter.logResultRejected": "$events/result 수락되지 않음({eventId}): {message}",
|
|
230
|
+
"adapter.logResultBackfillFailed": "$events/result 재기입 실패({eventId}): {message}",
|
|
231
|
+
"adapter.logRemoteQuestion": "remote 질문 브로드캐스트 → 스마트폰 질문 카드 questionID={id} (session={session})",
|
|
232
|
+
"adapter.errRemoteReadyFrame": "remote events 첫 프레임 이상",
|
|
233
|
+
"adapter.logRemoteApproval": "remote 승인 브로드캐스트 → 스마트폰 권한 카드 permissionID={id} (session={session})",
|
|
234
|
+
"adapter.logUserQuestionRoute": "user-questions 선택 → session={session}으로 라우팅",
|
|
235
|
+
"adapter.errDshQuestionEmpty": "dsh 질문 내용이 비어 있습니다",
|
|
236
|
+
"adapter.errQuestionTimeout": "질문 시간 초과({seconds}s), 취소됨",
|
|
237
|
+
"adapter.errQuestionCancelledAbort": "질문 취소됨(에이전트 중단)",
|
|
238
|
+
"adapter.errQuestionCancelledRelay": "릴레이에 연결할 수 없어 질문이 취소되었습니다",
|
|
239
|
+
"adapter.logQuestionToPhone": "user-questions 선택 → 스마트폰 질문 카드로 전송 questionID={id} (session={session})",
|
|
240
|
+
"adapter.errQuestionUserCancelled": "사용자가 스마트폰에서 질문을 취소/거부했습니다",
|
|
241
|
+
"adapter.logApprovalRequest": "승인 요청(tool={tool}) → 스마트폰 권한 카드로 전송 permissionID={id}",
|
|
242
|
+
"adapter.logAgentPresetFailed": "agentPreset 해석 실패({preset}), preset 없이 대체: {message}",
|
|
243
|
+
"adapter.logSessionLiveAdopted": "세션 {session}은 이 프로세스의 다른 에이전트가 보유 중(live)입니다. 기존 에이전트를 채택하여 계속합니다: {message}",
|
|
244
|
+
"adapter.logDisposeSkipped": "채택한 외부 live 에이전트는 dispose를 실행하지 않습니다(세션 {session}은 원래 보유자가 관리)",
|
|
245
|
+
"adapter.logAgentCreateFailed": "에이전트 생성/복원 실패({session}): {message}",
|
|
246
|
+
"adapter.errSessionBusyLive": "세션 {session}이 사용 중(live)입니다. 나중에 다시 시도하세요",
|
|
247
|
+
"adapter.errAgentsUnavailable": "agents 서비스를 사용할 수 없습니다",
|
|
248
|
+
"adapter.logToolReason": "dsh가 도구 {tool} 실행을 요청합니다",
|
|
249
|
+
"adapter.logGatewayConnected": "로컬 OpenClaw Gateway에 연결됨({version})",
|
|
250
|
+
"adapter.logGatewayDisconnected": "OpenClaw Gateway와 연결이 끊어졌습니다. 공식 클라이언트가 재연결 중…",
|
|
251
|
+
"adapter.logGatewayConnectFailed": "로컬 OpenClaw Gateway에 연결할 수 없습니다(최초에는 로컬에서 장치를 승인하세요: `openclaw devices list` + `openclaw devices approve <requestId>`)",
|
|
252
|
+
"adapter.errGatewayNoSessionKey": "Gateway가 세션 key를 반환하지 않았습니다",
|
|
253
|
+
"adapter.logDeleteSessionFailed": "세션 삭제 실패({session}): {message}(삭제됨으로 응답)",
|
|
254
|
+
"adapter.logApprovalReplyFailed": "승인 응답 실패({id}): {message}",
|
|
255
|
+
"adapter.logPendingApproval": "session.pending: 보류 중인 승인 {count}건 재전송 (session={session})",
|
|
256
|
+
"adapter.workspaceDefault": "기본",
|
|
257
|
+
"adapter.cursorSessionTitle": "Cursor 세션",
|
|
258
|
+
"adapter.reasonDisconnect": "릴레이 연결 끊김, 자동 거부(fail-closed)",
|
|
259
|
+
"adapter.warnInvalidEnv": "잘못된 {name} 무시: {raw}({list})",
|
|
260
|
+
"adapter.errStartFailed": "시작 실패:",
|
|
261
|
+
"adapter.msgStarted": "{name} 어댑터 시작됨(Ctrl+C로 종료)",
|
|
262
|
+
"adapter.warnCliMissing": "실행 파일 '{bin}'을(를) 찾을 수 없습니다. 설치하거나(예: npm i -g @openai/codex) TUNNELBOX_CODEX_BIN으로 경로를 지정하세요",
|
|
263
|
+
"adapter.errCliNotFound": "{name} 실행 파일 '{bin}'을(를) 찾을 수 없습니다: Codex CLI를 설치(npm i -g @openai/codex)하거나 TUNNELBOX_CODEX_BIN을 설정하세요",
|
|
264
|
+
"adapter.errSessionNotFound": "세션이 존재하지 않거나 이미 삭제되었습니다",
|
|
265
|
+
"adapter.checkHeader": "tunnelbox-codex 환경 점검",
|
|
266
|
+
"adapter.checkCliOk": "{name} 실행 파일: {path}",
|
|
267
|
+
"adapter.checkCliMissing": "{name} 실행 파일을 찾을 수 없습니다({bin})",
|
|
268
|
+
"bin.yes": "예",
|
|
269
|
+
"bin.no": "아니요",
|
|
270
|
+
"adapter.errAppServerSpawn": "codex app-server 를 시작할 수 없습니다: {message} (Codex CLI 가 `codex app-server` 를 지원하는지 확인하세요)",
|
|
271
|
+
"adapter.errAppServerExit": "codex app-server 가 종료되었습니다. 대기 중인 승인/선택은 자동으로 거부되었습니다",
|
|
272
|
+
"adapter.logUnsupportedServerRequest": "지원되지 않는 app-server 요청: {method}",
|
|
273
|
+
"adapter.logQuestionNative": "선택 요청 -> 휴대폰 선택 카드 questionID={id} (session={session})",
|
|
274
|
+
"adapter.logPermissionNative": "승인 요청 -> 휴대폰 승인 카드 permissionID={id} (session={session})",
|
|
275
|
+
"adapter.checkAppServerOk": "codex app-server 사용 가능",
|
|
276
|
+
"adapter.checkAppServerMissing": "이 Codex CLI 는 `codex app-server` 를 지원하지 않습니다 (Codex CLI 를 업그레이드하세요)",
|
|
277
|
+
"adapter.warnCursorCliMissing": "Cursor CLI 실행 파일 \"{bin}\"을(를) 찾을 수 없습니다. 설치하거나(https://cursor.com/docs/cli) TUNNELBOX_CURSOR_BIN에 경로를 지정하세요",
|
|
278
|
+
"adapter.checkCursorCliMissing": "Cursor CLI 실행 파일을 찾을 수 없습니다({bin}). https://cursor.com/docs/cli 에서 설치하세요",
|
|
279
|
+
"adapter.checkCursorAcpHint": "Cursor CLI를 감지했습니다. ACP 모드(`agent acp`)로 스트리밍/승인/선택을 제공합니다",
|
|
280
|
+
"adapter.errAcpSpawn": "cursor `agent acp` 시작 실패: {message} (Cursor CLI가 `agent acp`를 지원하는지 확인하세요)",
|
|
281
|
+
"adapter.errAcpNoSession": "Cursor ACP가 세션 id를 반환하지 않았습니다",
|
|
282
|
+
"adapter.logResumeFailed": "세션 재개 실패, 새 세션을 시작합니다: {message}",
|
|
283
|
+
"adapter.logPlanNative": "계획 승인 -> 휴대폰 승인 카드 permissionID={id} (session={session})",
|
|
284
|
+
"adapter.errTimeout": "시간 초과로 자동 거부했습니다(fail-closed)",
|
|
285
|
+
"adapter.planApprovalPrompt": "Cursor가 계획 승인을 요청합니다",
|
|
286
|
+
"adapter.checkCursorHeader": "tunnelbox-cursor 환경 점검",
|
|
287
|
+
"adapter.errAskBridge": "ask 브리지 시작 실패: {message}",
|
|
288
|
+
"adapter.logAskBridge": "MCP ask 브리지가 {url} 에서 대기 중",
|
|
289
|
+
"cursor.mcpAskDesc": "사용자가 휴대폰(tunnelbox)에서 선택하도록 요청하고 응답할 때까지 차단합니다. 계속하기 전에 사용자가 옵션 중 하나를 골라야 할 때(음식, 모드, 계획안 선택 등) 사용하세요. 선택한 옵션 라벨을 반환합니다.",
|
|
290
|
+
"cursor.mcpAskTitleDesc": "휴대폰 카드에 표시할 제목(선택)",
|
|
291
|
+
"cursor.mcpAskQuestionsDesc": "하나 이상의 질문. 각 질문에는 선택지가 있습니다",
|
|
292
|
+
"cursor.mcpPlanDesc": "사용자가 휴대폰(tunnelbox)에서 계획을 승인하도록 요청하고 응답할 때까지 차단합니다. 승인 여부를 반환합니다.",
|
|
293
|
+
"cursor.mcpNoBridge": "tunnelbox ask 브리지를 사용할 수 없습니다",
|
|
294
|
+
"cursor.mcpUnanswered": "사용자가 휴대폰에서 응답하지 않았습니다(오프라인 또는 시간 초과). 계속 진행하거나 대화로 물어보세요.",
|
|
295
|
+
"cursor.mcpRejected": "사용자가 휴대폰에서 질문을 거부했습니다.",
|
|
296
|
+
"cursor.mcpAnswersHeader": "사용자(휴대폰)의 응답:",
|
|
297
|
+
"cursor.mcpAccepted": "사용자가 계획을 승인했습니다.",
|
|
298
|
+
"cursor.mcpDenied": "사용자가 계획을 거부했습니다.",
|
|
299
|
+
"cursor.mcpPlanUnanswered": "사용자가 휴대폰에서 계획에 응답하지 않았습니다(오프라인 또는 시간 초과).",
|
|
300
|
+
"cursor.mcpAskNoQuestions": "질문이 제공되지 않았습니다.",
|
|
301
|
+
"cursor.mcpFailed": "tunnelbox ask 실패",
|
|
302
|
+
"adapter.errCursorExitCode": "Cursor CLI가 코드 {code}(으)로 종료되었습니다",
|
|
303
|
+
"adapter.errCursorExit": "Cursor CLI 종료({code}): {err}",
|
|
304
|
+
"adapter.errCursorSpawn": "Cursor CLI(agent)를 시작할 수 없습니다. 설치 및 로그인을 확인하세요({message})",
|
|
305
|
+
"adapter.errCursorStart": "Cursor CLI 시작 실패: {message}",
|
|
306
|
+
"adapter.errCursorGeneric": "Cursor 오류"
|
|
307
|
+
}
|