@jonsoc/app 1.1.34

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.
Files changed (139) hide show
  1. package/AGENTS.md +30 -0
  2. package/README.md +51 -0
  3. package/bunfig.toml +2 -0
  4. package/e2e/context.spec.ts +45 -0
  5. package/e2e/file-open.spec.ts +23 -0
  6. package/e2e/file-viewer.spec.ts +35 -0
  7. package/e2e/fixtures.ts +40 -0
  8. package/e2e/home.spec.ts +21 -0
  9. package/e2e/model-picker.spec.ts +43 -0
  10. package/e2e/navigation.spec.ts +9 -0
  11. package/e2e/palette.spec.ts +15 -0
  12. package/e2e/prompt-mention.spec.ts +26 -0
  13. package/e2e/prompt-slash-open.spec.ts +22 -0
  14. package/e2e/prompt.spec.ts +62 -0
  15. package/e2e/session.spec.ts +21 -0
  16. package/e2e/settings.spec.ts +44 -0
  17. package/e2e/sidebar.spec.ts +21 -0
  18. package/e2e/terminal-init.spec.ts +25 -0
  19. package/e2e/terminal.spec.ts +16 -0
  20. package/e2e/tsconfig.json +8 -0
  21. package/e2e/utils.ts +38 -0
  22. package/happydom.ts +75 -0
  23. package/index.html +23 -0
  24. package/package.json +72 -0
  25. package/playwright.config.ts +43 -0
  26. package/public/_headers +17 -0
  27. package/public/apple-touch-icon-v3.png +1 -0
  28. package/public/apple-touch-icon.png +1 -0
  29. package/public/favicon-96x96-v3.png +1 -0
  30. package/public/favicon-96x96.png +1 -0
  31. package/public/favicon-v3.ico +1 -0
  32. package/public/favicon-v3.svg +1 -0
  33. package/public/favicon.ico +1 -0
  34. package/public/favicon.svg +1 -0
  35. package/public/oc-theme-preload.js +28 -0
  36. package/public/site.webmanifest +1 -0
  37. package/public/social-share-zen.png +1 -0
  38. package/public/social-share.png +1 -0
  39. package/public/web-app-manifest-192x192.png +1 -0
  40. package/public/web-app-manifest-512x512.png +1 -0
  41. package/script/e2e-local.ts +143 -0
  42. package/src/addons/serialize.test.ts +319 -0
  43. package/src/addons/serialize.ts +591 -0
  44. package/src/app.tsx +150 -0
  45. package/src/components/dialog-connect-provider.tsx +428 -0
  46. package/src/components/dialog-edit-project.tsx +259 -0
  47. package/src/components/dialog-fork.tsx +104 -0
  48. package/src/components/dialog-manage-models.tsx +59 -0
  49. package/src/components/dialog-select-directory.tsx +208 -0
  50. package/src/components/dialog-select-file.tsx +196 -0
  51. package/src/components/dialog-select-mcp.tsx +96 -0
  52. package/src/components/dialog-select-model-unpaid.tsx +130 -0
  53. package/src/components/dialog-select-model.tsx +162 -0
  54. package/src/components/dialog-select-provider.tsx +70 -0
  55. package/src/components/dialog-select-server.tsx +249 -0
  56. package/src/components/dialog-settings.tsx +112 -0
  57. package/src/components/file-tree.tsx +112 -0
  58. package/src/components/link.tsx +17 -0
  59. package/src/components/model-tooltip.tsx +91 -0
  60. package/src/components/prompt-input.tsx +2076 -0
  61. package/src/components/session/index.ts +5 -0
  62. package/src/components/session/session-context-tab.tsx +428 -0
  63. package/src/components/session/session-header.tsx +343 -0
  64. package/src/components/session/session-new-view.tsx +93 -0
  65. package/src/components/session/session-sortable-tab.tsx +56 -0
  66. package/src/components/session/session-sortable-terminal-tab.tsx +187 -0
  67. package/src/components/session-context-usage.tsx +113 -0
  68. package/src/components/session-lsp-indicator.tsx +42 -0
  69. package/src/components/session-mcp-indicator.tsx +34 -0
  70. package/src/components/settings-agents.tsx +15 -0
  71. package/src/components/settings-commands.tsx +15 -0
  72. package/src/components/settings-general.tsx +306 -0
  73. package/src/components/settings-keybinds.tsx +437 -0
  74. package/src/components/settings-mcp.tsx +15 -0
  75. package/src/components/settings-models.tsx +15 -0
  76. package/src/components/settings-permissions.tsx +234 -0
  77. package/src/components/settings-providers.tsx +15 -0
  78. package/src/components/terminal.tsx +315 -0
  79. package/src/components/titlebar.tsx +156 -0
  80. package/src/context/command.tsx +308 -0
  81. package/src/context/comments.tsx +140 -0
  82. package/src/context/file.tsx +409 -0
  83. package/src/context/global-sdk.tsx +106 -0
  84. package/src/context/global-sync.tsx +898 -0
  85. package/src/context/language.tsx +161 -0
  86. package/src/context/layout-scroll.test.ts +73 -0
  87. package/src/context/layout-scroll.ts +118 -0
  88. package/src/context/layout.tsx +648 -0
  89. package/src/context/local.tsx +578 -0
  90. package/src/context/notification.tsx +173 -0
  91. package/src/context/permission.tsx +167 -0
  92. package/src/context/platform.tsx +59 -0
  93. package/src/context/prompt.tsx +245 -0
  94. package/src/context/sdk.tsx +48 -0
  95. package/src/context/server.tsx +214 -0
  96. package/src/context/settings.tsx +166 -0
  97. package/src/context/sync.tsx +320 -0
  98. package/src/context/terminal.tsx +267 -0
  99. package/src/custom-elements.d.ts +17 -0
  100. package/src/entry.tsx +76 -0
  101. package/src/env.d.ts +8 -0
  102. package/src/hooks/use-providers.ts +31 -0
  103. package/src/i18n/ar.ts +656 -0
  104. package/src/i18n/br.ts +667 -0
  105. package/src/i18n/da.ts +582 -0
  106. package/src/i18n/de.ts +591 -0
  107. package/src/i18n/en.ts +665 -0
  108. package/src/i18n/es.ts +585 -0
  109. package/src/i18n/fr.ts +592 -0
  110. package/src/i18n/ja.ts +579 -0
  111. package/src/i18n/ko.ts +580 -0
  112. package/src/i18n/no.ts +602 -0
  113. package/src/i18n/pl.ts +661 -0
  114. package/src/i18n/ru.ts +664 -0
  115. package/src/i18n/zh.ts +574 -0
  116. package/src/i18n/zht.ts +570 -0
  117. package/src/index.css +57 -0
  118. package/src/index.ts +2 -0
  119. package/src/pages/directory-layout.tsx +57 -0
  120. package/src/pages/error.tsx +290 -0
  121. package/src/pages/home.tsx +125 -0
  122. package/src/pages/layout.tsx +2599 -0
  123. package/src/pages/session.tsx +2505 -0
  124. package/src/sst-env.d.ts +10 -0
  125. package/src/utils/dom.ts +51 -0
  126. package/src/utils/id.ts +99 -0
  127. package/src/utils/index.ts +1 -0
  128. package/src/utils/perf.ts +135 -0
  129. package/src/utils/persist.ts +377 -0
  130. package/src/utils/prompt.ts +203 -0
  131. package/src/utils/same.ts +6 -0
  132. package/src/utils/solid-dnd.tsx +55 -0
  133. package/src/utils/sound.ts +110 -0
  134. package/src/utils/speech.ts +302 -0
  135. package/src/utils/worktree.ts +58 -0
  136. package/sst-env.d.ts +9 -0
  137. package/tsconfig.json +26 -0
  138. package/vite.config.ts +15 -0
  139. package/vite.js +26 -0
package/src/i18n/ko.ts ADDED
@@ -0,0 +1,580 @@
1
+ import { dict as en } from "./en"
2
+
3
+ type Keys = keyof typeof en
4
+
5
+ export const dict = {
6
+ "command.category.suggested": "추천",
7
+ "command.category.view": "보기",
8
+ "command.category.project": "프로젝트",
9
+ "command.category.provider": "공급자",
10
+ "command.category.server": "서버",
11
+ "command.category.session": "세션",
12
+ "command.category.theme": "테마",
13
+ "command.category.language": "언어",
14
+ "command.category.file": "파일",
15
+ "command.category.terminal": "터미널",
16
+ "command.category.model": "모델",
17
+ "command.category.mcp": "MCP",
18
+ "command.category.agent": "에이전트",
19
+ "command.category.permissions": "권한",
20
+ "command.category.workspace": "작업 공간",
21
+
22
+ "theme.scheme.system": "시스템",
23
+ "theme.scheme.light": "라이트",
24
+ "theme.scheme.dark": "다크",
25
+
26
+ "command.sidebar.toggle": "사이드바 토글",
27
+ "command.project.open": "프로젝트 열기",
28
+ "command.provider.connect": "공급자 연결",
29
+ "command.server.switch": "서버 전환",
30
+ "command.session.previous": "이전 세션",
31
+ "command.session.next": "다음 세션",
32
+ "command.session.archive": "세션 보관",
33
+
34
+ "command.palette": "명령 팔레트",
35
+
36
+ "command.theme.cycle": "테마 순환",
37
+ "command.theme.set": "테마 사용: {{theme}}",
38
+ "command.theme.scheme.cycle": "색상 테마 순환",
39
+ "command.theme.scheme.set": "색상 테마 사용: {{scheme}}",
40
+
41
+ "command.language.cycle": "언어 순환",
42
+ "command.language.set": "언어 사용: {{language}}",
43
+
44
+ "command.session.new": "새 세션",
45
+ "command.file.open": "파일 열기",
46
+ "command.file.open.description": "파일 및 명령어 검색",
47
+ "command.terminal.toggle": "터미널 토글",
48
+ "command.review.toggle": "검토 토글",
49
+ "command.terminal.new": "새 터미널",
50
+ "command.terminal.new.description": "새 터미널 탭 생성",
51
+ "command.steps.toggle": "단계 토글",
52
+ "command.steps.toggle.description": "현재 메시지의 단계 표시/숨기기",
53
+ "command.message.previous": "이전 메시지",
54
+ "command.message.previous.description": "이전 사용자 메시지로 이동",
55
+ "command.message.next": "다음 메시지",
56
+ "command.message.next.description": "다음 사용자 메시지로 이동",
57
+ "command.model.choose": "모델 선택",
58
+ "command.model.choose.description": "다른 모델 선택",
59
+ "command.mcp.toggle": "MCP 토글",
60
+ "command.mcp.toggle.description": "MCP 토글",
61
+ "command.agent.cycle": "에이전트 순환",
62
+ "command.agent.cycle.description": "다음 에이전트로 전환",
63
+ "command.agent.cycle.reverse": "에이전트 역순환",
64
+ "command.agent.cycle.reverse.description": "이전 에이전트로 전환",
65
+ "command.model.variant.cycle": "생각 수준 순환",
66
+ "command.model.variant.cycle.description": "다음 생각 수준으로 전환",
67
+ "command.permissions.autoaccept.enable": "편집 자동 수락",
68
+ "command.permissions.autoaccept.disable": "편집 자동 수락 중지",
69
+ "command.session.undo": "실행 취소",
70
+ "command.session.undo.description": "마지막 메시지 실행 취소",
71
+ "command.session.redo": "다시 실행",
72
+ "command.session.redo.description": "마지막 실행 취소된 메시지 다시 실행",
73
+ "command.session.compact": "세션 압축",
74
+ "command.session.compact.description": "컨텍스트 크기를 줄이기 위해 세션 요약",
75
+ "command.session.fork": "메시지에서 분기",
76
+ "command.session.fork.description": "이전 메시지에서 새 세션 생성",
77
+ "command.session.share": "세션 공유",
78
+ "command.session.share.description": "이 세션을 공유하고 URL을 클립보드에 복사",
79
+ "command.session.unshare": "세션 공유 중지",
80
+ "command.session.unshare.description": "이 세션 공유 중지",
81
+
82
+ "palette.search.placeholder": "파일 및 명령어 검색",
83
+ "palette.empty": "결과 없음",
84
+ "palette.group.commands": "명령어",
85
+ "palette.group.files": "파일",
86
+
87
+ "dialog.provider.search.placeholder": "공급자 검색",
88
+ "dialog.provider.empty": "공급자 없음",
89
+ "dialog.provider.group.popular": "인기",
90
+ "dialog.provider.group.other": "기타",
91
+ "dialog.provider.tag.recommended": "추천",
92
+ "dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결",
93
+ "dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결",
94
+ "dialog.provider.copilot.note": "Copilot 또는 API 키로 연결",
95
+
96
+ "dialog.model.select.title": "모델 선택",
97
+ "dialog.model.search.placeholder": "모델 검색",
98
+ "dialog.model.empty": "모델 결과 없음",
99
+ "dialog.model.manage": "모델 관리",
100
+ "dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정",
101
+
102
+ "dialog.model.unpaid.freeModels.title": "JonsOC에서 제공하는 무료 모델",
103
+ "dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가",
104
+
105
+ "dialog.provider.viewAll": "모든 공급자 보기",
106
+
107
+ "provider.connect.title": "{{provider}} 연결",
108
+ "provider.connect.title.anthropicProMax": "Claude Pro/Max로 로그인",
109
+ "provider.connect.selectMethod": "{{provider}} 로그인 방법 선택",
110
+ "provider.connect.method.apiKey": "API 키",
111
+ "provider.connect.status.inProgress": "인증 진행 중...",
112
+ "provider.connect.status.waiting": "인증 대기 중...",
113
+ "provider.connect.status.failed": "인증 실패: {{error}}",
114
+ "provider.connect.apiKey.description":
115
+ "{{provider}} API 키를 입력하여 계정을 연결하고 JonsOC에서 {{provider}} 모델을 사용하세요.",
116
+ "provider.connect.apiKey.label": "{{provider}} API 키",
117
+ "provider.connect.apiKey.placeholder": "API 키",
118
+ "provider.connect.apiKey.required": "API 키가 필요합니다",
119
+ "provider.connect.jonsocZen.line1":
120
+ "JonsOC Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.",
121
+ "provider.connect.jonsocZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.",
122
+ "provider.connect.jonsocZen.visit.prefix": "",
123
+ "provider.connect.jonsocZen.visit.suffix": "를 방문하여 API 키를 받으세요.",
124
+ "provider.connect.oauth.code.visit.prefix": "",
125
+ "provider.connect.oauth.code.visit.link": "이 링크",
126
+ "provider.connect.oauth.code.visit.suffix":
127
+ "를 방문하여 인증 코드를 받아 계정을 연결하고 JonsOC에서 {{provider}} 모델을 사용하세요.",
128
+ "provider.connect.oauth.code.label": "{{method}} 인증 코드",
129
+ "provider.connect.oauth.code.placeholder": "인증 코드",
130
+ "provider.connect.oauth.code.required": "인증 코드가 필요합니다",
131
+ "provider.connect.oauth.code.invalid": "유효하지 않은 인증 코드",
132
+ "provider.connect.oauth.auto.visit.prefix": "",
133
+ "provider.connect.oauth.auto.visit.link": "이 링크",
134
+ "provider.connect.oauth.auto.visit.suffix":
135
+ "를 방문하고 아래 코드를 입력하여 계정을 연결하고 JonsOC에서 {{provider}} 모델을 사용하세요.",
136
+ "provider.connect.oauth.auto.confirmationCode": "확인 코드",
137
+ "provider.connect.toast.connected.title": "{{provider}} 연결됨",
138
+ "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.",
139
+
140
+ "model.tag.free": "무료",
141
+ "model.tag.latest": "최신",
142
+
143
+ "common.search.placeholder": "검색",
144
+ "common.goBack": "뒤로 가기",
145
+ "common.loading": "로딩 중",
146
+ "common.cancel": "취소",
147
+ "common.submit": "제출",
148
+ "common.save": "저장",
149
+ "common.saving": "저장 중...",
150
+ "common.default": "기본값",
151
+ "common.attachment": "첨부 파일",
152
+
153
+ "prompt.placeholder.shell": "셸 명령어 입력...",
154
+ "prompt.placeholder.normal": '무엇이든 물어보세요... "{{example}}"',
155
+ "prompt.mode.shell": "셸",
156
+ "prompt.mode.shell.exit": "종료하려면 esc",
157
+
158
+ "prompt.example.1": "코드베이스의 TODO 수정",
159
+ "prompt.example.2": "이 프로젝트의 기술 스택이 무엇인가요?",
160
+ "prompt.example.3": "고장 난 테스트 수정",
161
+ "prompt.example.4": "인증 작동 방식 설명",
162
+ "prompt.example.5": "보안 취약점 찾기 및 수정",
163
+ "prompt.example.6": "사용자 서비스에 단위 테스트 추가",
164
+ "prompt.example.7": "이 함수를 더 읽기 쉽게 리팩터링",
165
+ "prompt.example.8": "이 오류는 무엇을 의미하나요?",
166
+ "prompt.example.9": "이 문제 디버깅 도와줘",
167
+ "prompt.example.10": "API 문서 생성",
168
+ "prompt.example.11": "데이터베이스 쿼리 최적화",
169
+ "prompt.example.12": "입력 유효성 검사 추가",
170
+ "prompt.example.13": "...를 위한 새 컴포넌트 생성",
171
+ "prompt.example.14": "이 프로젝트를 어떻게 배포하나요?",
172
+ "prompt.example.15": "모범 사례를 기준으로 내 코드 검토",
173
+ "prompt.example.16": "이 함수에 오류 처리 추가",
174
+ "prompt.example.17": "이 정규식 패턴 설명",
175
+ "prompt.example.18": "이것을 TypeScript로 변환",
176
+ "prompt.example.19": "코드베이스 전체에 로깅 추가",
177
+ "prompt.example.20": "오래된 종속성은 무엇인가요?",
178
+ "prompt.example.21": "마이그레이션 스크립트 작성 도와줘",
179
+ "prompt.example.22": "이 엔드포인트에 캐싱 구현",
180
+ "prompt.example.23": "이 목록에 페이지네이션 추가",
181
+ "prompt.example.24": "...를 위한 CLI 명령어 생성",
182
+ "prompt.example.25": "여기서 환경 변수는 어떻게 작동하나요?",
183
+
184
+ "prompt.popover.emptyResults": "일치하는 결과 없음",
185
+ "prompt.popover.emptyCommands": "일치하는 명령어 없음",
186
+ "prompt.dropzone.label": "이미지나 PDF를 여기에 드롭하세요",
187
+ "prompt.slash.badge.custom": "사용자 지정",
188
+ "prompt.context.active": "활성",
189
+ "prompt.context.includeActiveFile": "활성 파일 포함",
190
+ "prompt.context.removeActiveFile": "컨텍스트에서 활성 파일 제거",
191
+ "prompt.context.removeFile": "컨텍스트에서 파일 제거",
192
+ "prompt.action.attachFile": "파일 첨부",
193
+ "prompt.attachment.remove": "첨부 파일 제거",
194
+ "prompt.action.send": "전송",
195
+ "prompt.action.stop": "중지",
196
+
197
+ "prompt.toast.pasteUnsupported.title": "지원되지 않는 붙여넣기",
198
+ "prompt.toast.pasteUnsupported.description": "이미지나 PDF만 붙여넣을 수 있습니다.",
199
+ "prompt.toast.modelAgentRequired.title": "에이전트 및 모델 선택",
200
+ "prompt.toast.modelAgentRequired.description": "프롬프트를 보내기 전에 에이전트와 모델을 선택하세요.",
201
+ "prompt.toast.worktreeCreateFailed.title": "작업 트리 생성 실패",
202
+ "prompt.toast.sessionCreateFailed.title": "세션 생성 실패",
203
+ "prompt.toast.shellSendFailed.title": "셸 명령 전송 실패",
204
+ "prompt.toast.commandSendFailed.title": "명령 전송 실패",
205
+ "prompt.toast.promptSendFailed.title": "프롬프트 전송 실패",
206
+
207
+ "dialog.mcp.title": "MCP",
208
+ "dialog.mcp.description": "{{total}}개 중 {{enabled}}개 활성화됨",
209
+ "dialog.mcp.empty": "구성된 MCP 없음",
210
+
211
+ "mcp.status.connected": "연결됨",
212
+ "mcp.status.failed": "실패",
213
+ "mcp.status.needs_auth": "인증 필요",
214
+ "mcp.status.disabled": "비활성화됨",
215
+
216
+ "dialog.fork.empty": "분기할 메시지 없음",
217
+
218
+ "dialog.directory.search.placeholder": "폴더 검색",
219
+ "dialog.directory.empty": "폴더 없음",
220
+
221
+ "dialog.server.title": "서버",
222
+ "dialog.server.description": "이 앱이 연결할 JonsOC 서버를 전환합니다.",
223
+ "dialog.server.search.placeholder": "서버 검색",
224
+ "dialog.server.empty": "서버 없음",
225
+ "dialog.server.add.title": "서버 추가",
226
+ "dialog.server.add.url": "서버 URL",
227
+ "dialog.server.add.placeholder": "http://localhost:4096",
228
+ "dialog.server.add.error": "서버에 연결할 수 없습니다",
229
+ "dialog.server.add.checking": "확인 중...",
230
+ "dialog.server.add.button": "추가",
231
+ "dialog.server.default.title": "기본 서버",
232
+ "dialog.server.default.description":
233
+ "로컬 서버를 시작하는 대신 앱 실행 시 이 서버에 연결합니다. 다시 시작해야 합니다.",
234
+ "dialog.server.default.none": "선택된 서버 없음",
235
+ "dialog.server.default.set": "현재 서버를 기본값으로 설정",
236
+ "dialog.server.default.clear": "지우기",
237
+ "dialog.server.action.remove": "서버 제거",
238
+
239
+ "dialog.project.edit.title": "프로젝트 편집",
240
+ "dialog.project.edit.name": "이름",
241
+ "dialog.project.edit.icon": "아이콘",
242
+ "dialog.project.edit.icon.alt": "프로젝트 아이콘",
243
+ "dialog.project.edit.icon.hint": "이미지를 클릭하거나 드래그하세요",
244
+ "dialog.project.edit.icon.recommended": "권장: 128x128px",
245
+ "dialog.project.edit.color": "색상",
246
+ "dialog.project.edit.color.select": "{{color}} 색상 선택",
247
+
248
+ "context.breakdown.title": "컨텍스트 분석",
249
+ "context.breakdown.note": '입력 토큰의 대략적인 분석입니다. "기타"에는 도구 정의 및 오버헤드가 포함됩니다.',
250
+ "context.breakdown.system": "시스템",
251
+ "context.breakdown.user": "사용자",
252
+ "context.breakdown.assistant": "어시스턴트",
253
+ "context.breakdown.tool": "도구 호출",
254
+ "context.breakdown.other": "기타",
255
+
256
+ "context.systemPrompt.title": "시스템 프롬프트",
257
+ "context.rawMessages.title": "원시 메시지",
258
+
259
+ "context.stats.session": "세션",
260
+ "context.stats.messages": "메시지",
261
+ "context.stats.provider": "공급자",
262
+ "context.stats.model": "모델",
263
+ "context.stats.limit": "컨텍스트 제한",
264
+ "context.stats.totalTokens": "총 토큰",
265
+ "context.stats.usage": "사용량",
266
+ "context.stats.inputTokens": "입력 토큰",
267
+ "context.stats.outputTokens": "출력 토큰",
268
+ "context.stats.reasoningTokens": "추론 토큰",
269
+ "context.stats.cacheTokens": "캐시 토큰 (읽기/쓰기)",
270
+ "context.stats.userMessages": "사용자 메시지",
271
+ "context.stats.assistantMessages": "어시스턴트 메시지",
272
+ "context.stats.totalCost": "총 비용",
273
+ "context.stats.sessionCreated": "세션 생성됨",
274
+ "context.stats.lastActivity": "최근 활동",
275
+
276
+ "context.usage.tokens": "토큰",
277
+ "context.usage.usage": "사용량",
278
+ "context.usage.cost": "비용",
279
+ "context.usage.clickToView": "컨텍스트를 보려면 클릭",
280
+ "context.usage.view": "컨텍스트 사용량 보기",
281
+
282
+ "language.en": "영어",
283
+ "language.zh": "중국어 (간체)",
284
+ "language.zht": "중국어 (번체)",
285
+ "language.ko": "한국어",
286
+ "language.de": "독일어",
287
+ "language.es": "스페인어",
288
+ "language.fr": "프랑스어",
289
+ "language.ja": "일본어",
290
+ "language.da": "덴마크어",
291
+ "language.ru": "러시아어",
292
+ "language.pl": "폴란드어",
293
+ "language.ar": "아랍어",
294
+ "language.no": "노르웨이어",
295
+ "language.br": "포르투갈어 (브라질)",
296
+
297
+ "toast.language.title": "언어",
298
+ "toast.language.description": "{{language}}(으)로 전환됨",
299
+
300
+ "toast.theme.title": "테마 전환됨",
301
+ "toast.scheme.title": "색상 테마",
302
+
303
+ "toast.permissions.autoaccept.on.title": "편집 자동 수락 중",
304
+ "toast.permissions.autoaccept.on.description": "편집 및 쓰기 권한이 자동으로 승인됩니다",
305
+ "toast.permissions.autoaccept.off.title": "편집 자동 수락 중지됨",
306
+ "toast.permissions.autoaccept.off.description": "편집 및 쓰기 권한 승인이 필요합니다",
307
+
308
+ "toast.model.none.title": "선택된 모델 없음",
309
+ "toast.model.none.description": "이 세션을 요약하려면 공급자를 연결하세요",
310
+
311
+ "toast.file.loadFailed.title": "파일 로드 실패",
312
+
313
+ "toast.session.share.copyFailed.title": "URL 클립보드 복사 실패",
314
+ "toast.session.share.success.title": "세션 공유됨",
315
+ "toast.session.share.success.description": "공유 URL이 클립보드에 복사되었습니다!",
316
+ "toast.session.share.failed.title": "세션 공유 실패",
317
+ "toast.session.share.failed.description": "세션을 공유하는 동안 오류가 발생했습니다",
318
+
319
+ "toast.session.unshare.success.title": "세션 공유 해제됨",
320
+ "toast.session.unshare.success.description": "세션 공유가 성공적으로 해제되었습니다!",
321
+ "toast.session.unshare.failed.title": "세션 공유 해제 실패",
322
+ "toast.session.unshare.failed.description": "세션 공유를 해제하는 동안 오류가 발생했습니다",
323
+
324
+ "toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다",
325
+
326
+ "toast.update.title": "업데이트 가능",
327
+ "toast.update.description": "JonsOC의 새 버전({{version}})을 설치할 수 있습니다.",
328
+ "toast.update.action.installRestart": "설치 및 다시 시작",
329
+ "toast.update.action.notYet": "나중에",
330
+
331
+ "error.page.title": "문제가 발생했습니다",
332
+ "error.page.description": "애플리케이션을 로드하는 동안 오류가 발생했습니다.",
333
+ "error.page.details.label": "오류 세부 정보",
334
+ "error.page.action.restart": "다시 시작",
335
+ "error.page.action.checking": "확인 중...",
336
+ "error.page.action.checkUpdates": "업데이트 확인",
337
+ "error.page.action.updateTo": "{{version}} 버전으로 업데이트",
338
+ "error.page.report.prefix": "이 오류를 JonsOC 팀에 제보해 주세요: ",
339
+ "error.page.report.discord": "Discord",
340
+ "error.page.version": "버전: {{version}}",
341
+
342
+ "error.dev.rootNotFound":
343
+ "루트 요소를 찾을 수 없습니다. index.html에 추가하는 것을 잊으셨나요? 또는 id 속성의 철자가 틀렸을 수 있습니다.",
344
+
345
+ "error.globalSync.connectFailed": "서버에 연결할 수 없습니다. `{{url}}`에서 서버가 실행 중인가요?",
346
+
347
+ "error.chain.unknown": "알 수 없는 오류",
348
+ "error.chain.causedBy": "원인:",
349
+ "error.chain.apiError": "API 오류",
350
+ "error.chain.status": "상태: {{status}}",
351
+ "error.chain.retryable": "재시도 가능: {{retryable}}",
352
+ "error.chain.responseBody": "응답 본문:\n{{body}}",
353
+ "error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?",
354
+ "error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}",
355
+ "error.chain.checkConfig": "구성(jonsoc.json)의 공급자/모델 이름을 확인하세요",
356
+ "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: JonsOC는 아직 MCP 인증을 지원하지 않습니다.',
357
+ "error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}",
358
+ "error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.',
359
+ "error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다",
360
+ "error.chain.configJsonInvalidWithMessage": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다: {{message}}",
361
+ "error.chain.configDirectoryTypo":
362
+ '{{path}}의 "{{dir}}" 디렉터리가 유효하지 않습니다. 디렉터리 이름을 "{{suggestion}}"으로 변경하거나 제거하세요. 이는 흔한 오타입니다.',
363
+ "error.chain.configFrontmatterError": "{{path}}의 frontmatter 파싱 실패:\n{{message}}",
364
+ "error.chain.configInvalid": "{{path}}의 구성 파일이 유효하지 않습니다",
365
+ "error.chain.configInvalidWithMessage": "{{path}}의 구성 파일이 유효하지 않습니다: {{message}}",
366
+
367
+ "notification.permission.title": "권한 필요",
368
+ "notification.permission.description": "{{projectName}}의 {{sessionTitle}}에서 권한이 필요합니다",
369
+ "notification.question.title": "질문",
370
+ "notification.question.description": "{{projectName}}의 {{sessionTitle}}에서 질문이 있습니다",
371
+ "notification.action.goToSession": "세션으로 이동",
372
+
373
+ "notification.session.responseReady.title": "응답 준비됨",
374
+ "notification.session.error.title": "세션 오류",
375
+ "notification.session.error.fallbackDescription": "오류가 발생했습니다",
376
+
377
+ "home.recentProjects": "최근 프로젝트",
378
+ "home.empty.title": "최근 프로젝트 없음",
379
+ "home.empty.description": "로컬 프로젝트를 열어 시작하세요",
380
+
381
+ "session.tab.session": "세션",
382
+ "session.tab.review": "검토",
383
+ "session.tab.context": "컨텍스트",
384
+ "session.panel.reviewAndFiles": "검토 및 파일",
385
+ "session.review.filesChanged": "{{count}}개 파일 변경됨",
386
+ "session.review.loadingChanges": "변경 사항 로드 중...",
387
+ "session.review.empty": "이 세션에 변경 사항이 아직 없습니다",
388
+ "session.messages.renderEarlier": "이전 메시지 렌더링",
389
+ "session.messages.loadingEarlier": "이전 메시지 로드 중...",
390
+ "session.messages.loadEarlier": "이전 메시지 로드",
391
+ "session.messages.loading": "메시지 로드 중...",
392
+
393
+ "session.context.addToContext": "컨텍스트에 {{selection}} 추가",
394
+
395
+ "session.new.worktree.main": "메인 브랜치",
396
+ "session.new.worktree.mainWithBranch": "메인 브랜치 ({{branch}})",
397
+ "session.new.worktree.create": "새 작업 트리 생성",
398
+ "session.new.lastModified": "최근 수정",
399
+
400
+ "session.header.search.placeholder": "{{project}} 검색",
401
+ "session.header.searchFiles": "파일 검색",
402
+
403
+ "session.share.popover.title": "웹에 게시",
404
+ "session.share.popover.description.shared": "이 세션은 웹에 공개되었습니다. 링크가 있는 누구나 액세스할 수 있습니다.",
405
+ "session.share.popover.description.unshared":
406
+ "세션을 웹에 공개적으로 공유합니다. 링크가 있는 누구나 액세스할 수 있습니다.",
407
+ "session.share.action.share": "공유",
408
+ "session.share.action.publish": "게시",
409
+ "session.share.action.publishing": "게시 중...",
410
+ "session.share.action.unpublish": "게시 취소",
411
+ "session.share.action.unpublishing": "게시 취소 중...",
412
+ "session.share.action.view": "보기",
413
+ "session.share.copy.copied": "복사됨",
414
+ "session.share.copy.copyLink": "링크 복사",
415
+
416
+ "lsp.tooltip.none": "LSP 서버 없음",
417
+ "lsp.label.connected": "{{count}} LSP",
418
+
419
+ "prompt.loading": "프롬프트 로드 중...",
420
+ "terminal.loading": "터미널 로드 중...",
421
+ "terminal.title": "터미널",
422
+ "terminal.title.numbered": "터미널 {{number}}",
423
+ "terminal.close": "터미널 닫기",
424
+
425
+ "common.closeTab": "탭 닫기",
426
+ "common.dismiss": "닫기",
427
+ "common.requestFailed": "요청 실패",
428
+ "common.moreOptions": "더 많은 옵션",
429
+ "common.learnMore": "더 알아보기",
430
+ "common.rename": "이름 바꾸기",
431
+ "common.reset": "초기화",
432
+ "common.archive": "보관",
433
+ "common.delete": "삭제",
434
+ "common.close": "닫기",
435
+ "common.edit": "편집",
436
+ "common.loadMore": "더 불러오기",
437
+
438
+ "sidebar.nav.projectsAndSessions": "프로젝트 및 세션",
439
+ "sidebar.settings": "설정",
440
+ "sidebar.help": "도움말",
441
+ "sidebar.workspaces.enable": "작업 공간 활성화",
442
+ "sidebar.workspaces.disable": "작업 공간 비활성화",
443
+ "sidebar.gettingStarted.title": "시작하기",
444
+ "sidebar.gettingStarted.line1": "JonsOC에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.",
445
+ "sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.",
446
+ "sidebar.project.recentSessions": "최근 세션",
447
+ "sidebar.project.viewAllSessions": "모든 세션 보기",
448
+
449
+ "settings.section.desktop": "데스크톱",
450
+ "settings.tab.general": "일반",
451
+ "settings.tab.shortcuts": "단축키",
452
+
453
+ "settings.general.section.appearance": "모양",
454
+ "settings.general.section.notifications": "시스템 알림",
455
+ "settings.general.section.sounds": "효과음",
456
+
457
+ "settings.general.row.language.title": "언어",
458
+ "settings.general.row.language.description": "JonsOC 표시 언어 변경",
459
+ "settings.general.row.appearance.title": "모양",
460
+ "settings.general.row.appearance.description": "기기에서 JonsOC가 보이는 방식 사용자 지정",
461
+ "settings.general.row.theme.title": "테마",
462
+ "settings.general.row.theme.description": "JonsOC 테마 사용자 지정",
463
+ "settings.general.row.font.title": "글꼴",
464
+ "settings.general.row.font.description": "코드 블록에 사용되는 고정폭 글꼴 사용자 지정",
465
+
466
+ "settings.general.notifications.agent.title": "에이전트",
467
+ "settings.general.notifications.agent.description": "에이전트가 완료되거나 주의가 필요할 때 시스템 알림 표시",
468
+ "settings.general.notifications.permissions.title": "권한",
469
+ "settings.general.notifications.permissions.description": "권한이 필요할 때 시스템 알림 표시",
470
+ "settings.general.notifications.errors.title": "오류",
471
+ "settings.general.notifications.errors.description": "오류가 발생했을 때 시스템 알림 표시",
472
+
473
+ "settings.general.sounds.agent.title": "에이전트",
474
+ "settings.general.sounds.agent.description": "에이전트가 완료되거나 주의가 필요할 때 소리 재생",
475
+ "settings.general.sounds.permissions.title": "권한",
476
+ "settings.general.sounds.permissions.description": "권한이 필요할 때 소리 재생",
477
+ "settings.general.sounds.errors.title": "오류",
478
+ "settings.general.sounds.errors.description": "오류가 발생했을 때 소리 재생",
479
+
480
+ "settings.shortcuts.title": "키보드 단축키",
481
+ "settings.shortcuts.reset.button": "기본값으로 초기화",
482
+ "settings.shortcuts.reset.toast.title": "단축키 초기화됨",
483
+ "settings.shortcuts.reset.toast.description": "키보드 단축키가 기본값으로 초기화되었습니다.",
484
+ "settings.shortcuts.conflict.title": "단축키가 이미 사용 중임",
485
+ "settings.shortcuts.conflict.description": "{{keybind}}은(는) 이미 {{titles}}에 할당되어 있습니다.",
486
+ "settings.shortcuts.unassigned": "할당되지 않음",
487
+ "settings.shortcuts.pressKeys": "키 누르기",
488
+ "settings.shortcuts.search.placeholder": "단축키 검색",
489
+ "settings.shortcuts.search.empty": "단축키를 찾을 수 없습니다",
490
+
491
+ "settings.shortcuts.group.general": "일반",
492
+ "settings.shortcuts.group.session": "세션",
493
+ "settings.shortcuts.group.navigation": "탐색",
494
+ "settings.shortcuts.group.modelAndAgent": "모델 및 에이전트",
495
+ "settings.shortcuts.group.terminal": "터미널",
496
+ "settings.shortcuts.group.prompt": "프롬프트",
497
+
498
+ "settings.providers.title": "공급자",
499
+ "settings.providers.description": "공급자 설정은 여기서 구성할 수 있습니다.",
500
+ "settings.models.title": "모델",
501
+ "settings.models.description": "모델 설정은 여기서 구성할 수 있습니다.",
502
+ "settings.agents.title": "에이전트",
503
+ "settings.agents.description": "에이전트 설정은 여기서 구성할 수 있습니다.",
504
+ "settings.commands.title": "명령어",
505
+ "settings.commands.description": "명령어 설정은 여기서 구성할 수 있습니다.",
506
+ "settings.mcp.title": "MCP",
507
+ "settings.mcp.description": "MCP 설정은 여기서 구성할 수 있습니다.",
508
+
509
+ "settings.permissions.title": "권한",
510
+ "settings.permissions.description": "서버가 기본적으로 사용할 수 있는 도구를 제어합니다.",
511
+ "settings.permissions.section.tools": "도구",
512
+ "settings.permissions.toast.updateFailed.title": "권한 업데이트 실패",
513
+
514
+ "settings.permissions.action.allow": "허용",
515
+ "settings.permissions.action.ask": "묻기",
516
+ "settings.permissions.action.deny": "거부",
517
+
518
+ "settings.permissions.tool.read.title": "읽기",
519
+ "settings.permissions.tool.read.description": "파일 읽기 (파일 경로와 일치)",
520
+ "settings.permissions.tool.edit.title": "편집",
521
+ "settings.permissions.tool.edit.description": "파일 수정 (편집, 쓰기, 패치 및 다중 편집 포함)",
522
+ "settings.permissions.tool.glob.title": "Glob",
523
+ "settings.permissions.tool.glob.description": "glob 패턴을 사용하여 파일 일치",
524
+ "settings.permissions.tool.grep.title": "Grep",
525
+ "settings.permissions.tool.grep.description": "정규식을 사용하여 파일 내용 검색",
526
+ "settings.permissions.tool.list.title": "목록",
527
+ "settings.permissions.tool.list.description": "디렉터리 내 파일 나열",
528
+ "settings.permissions.tool.bash.title": "Bash",
529
+ "settings.permissions.tool.bash.description": "셸 명령어 실행",
530
+ "settings.permissions.tool.task.title": "작업",
531
+ "settings.permissions.tool.task.description": "하위 에이전트 실행",
532
+ "settings.permissions.tool.skill.title": "기술",
533
+ "settings.permissions.tool.skill.description": "이름으로 기술 로드",
534
+ "settings.permissions.tool.lsp.title": "LSP",
535
+ "settings.permissions.tool.lsp.description": "언어 서버 쿼리 실행",
536
+ "settings.permissions.tool.todoread.title": "할 일 읽기",
537
+ "settings.permissions.tool.todoread.description": "할 일 목록 읽기",
538
+ "settings.permissions.tool.todowrite.title": "할 일 쓰기",
539
+ "settings.permissions.tool.todowrite.description": "할 일 목록 업데이트",
540
+ "settings.permissions.tool.webfetch.title": "웹 가져오기",
541
+ "settings.permissions.tool.webfetch.description": "URL에서 콘텐츠 가져오기",
542
+ "settings.permissions.tool.websearch.title": "웹 검색",
543
+ "settings.permissions.tool.websearch.description": "웹 검색",
544
+ "settings.permissions.tool.codesearch.title": "코드 검색",
545
+ "settings.permissions.tool.codesearch.description": "웹에서 코드 검색",
546
+ "settings.permissions.tool.external_directory.title": "외부 디렉터리",
547
+ "settings.permissions.tool.external_directory.description": "프로젝트 디렉터리 외부의 파일에 액세스",
548
+ "settings.permissions.tool.doom_loop.title": "무한 반복",
549
+ "settings.permissions.tool.doom_loop.description": "동일한 입력으로 반복되는 도구 호출 감지",
550
+
551
+ "session.delete.failed.title": "세션 삭제 실패",
552
+ "session.delete.title": "세션 삭제",
553
+ "session.delete.confirm": '"{{name}}" 세션을 삭제하시겠습니까?',
554
+ "session.delete.button": "세션 삭제",
555
+
556
+ "workspace.new": "새 작업 공간",
557
+ "workspace.type.local": "로컬",
558
+ "workspace.type.sandbox": "샌드박스",
559
+ "workspace.create.failed.title": "작업 공간 생성 실패",
560
+ "workspace.delete.failed.title": "작업 공간 삭제 실패",
561
+ "workspace.resetting.title": "작업 공간 재설정 중",
562
+ "workspace.resetting.description": "잠시 시간이 걸릴 수 있습니다.",
563
+ "workspace.reset.failed.title": "작업 공간 재설정 실패",
564
+ "workspace.reset.success.title": "작업 공간 재설정됨",
565
+ "workspace.reset.success.description": "작업 공간이 이제 기본 브랜치와 일치합니다.",
566
+ "workspace.status.checking": "병합되지 않은 변경 사항 확인 중...",
567
+ "workspace.status.error": "Git 상태를 확인할 수 없습니다.",
568
+ "workspace.status.clean": "병합되지 않은 변경 사항이 감지되지 않았습니다.",
569
+ "workspace.status.dirty": "이 작업 공간에서 병합되지 않은 변경 사항이 감지되었습니다.",
570
+ "workspace.delete.title": "작업 공간 삭제",
571
+ "workspace.delete.confirm": '"{{name}}" 작업 공간을 삭제하시겠습니까?',
572
+ "workspace.delete.button": "작업 공간 삭제",
573
+ "workspace.reset.title": "작업 공간 재설정",
574
+ "workspace.reset.confirm": '"{{name}}" 작업 공간을 재설정하시겠습니까?',
575
+ "workspace.reset.button": "작업 공간 재설정",
576
+ "workspace.reset.archived.none": "활성 세션이 보관되지 않습니다.",
577
+ "workspace.reset.archived.one": "1개의 세션이 보관됩니다.",
578
+ "workspace.reset.archived.many": "{{count}}개의 세션이 보관됩니다.",
579
+ "workspace.reset.note": "이 작업은 작업 공간을 기본 브랜치와 일치하도록 재설정합니다.",
580
+ }