deel-local-cli 1.10.0 → 1.13.0

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 (55) hide show
  1. package/README.ko.md +1167 -1166
  2. package/README.md +1224 -1223
  3. package/bin/deel.js +1 -1
  4. package/package.json +2 -2
  5. package/src/acp/map.js +367 -362
  6. package/src/acp/serve.js +810 -769
  7. package/src/agent/budget.js +156 -153
  8. package/src/agent/commit.js +534 -511
  9. package/src/agent/compact.js +158 -31
  10. package/src/agent/effort.js +308 -197
  11. package/src/agent/evolve.js +263 -213
  12. package/src/agent/filemem.js +16 -2
  13. package/src/agent/loop.js +1728 -1516
  14. package/src/agent/memory.js +156 -152
  15. package/src/agent/mention.js +210 -210
  16. package/src/agent/recall.js +222 -209
  17. package/src/agent/session.js +1056 -948
  18. package/src/backend/adapter.js +1355 -798
  19. package/src/backend/cachemark.js +223 -0
  20. package/src/backend/detect.js +327 -288
  21. package/src/backend/http.js +460 -458
  22. package/src/backend/mcp.js +407 -395
  23. package/src/backend/price.js +260 -197
  24. package/src/backend/probe.js +487 -473
  25. package/src/backend/quota.js +274 -157
  26. package/src/backend/retry.js +30 -6
  27. package/src/backend/tokens.js +59 -0
  28. package/src/backend/toolfit.js +352 -325
  29. package/src/backend/wire.js +715 -0
  30. package/src/commands.js +3184 -2998
  31. package/src/config.js +283 -244
  32. package/src/i18n/en.js +545 -520
  33. package/src/i18n/ja.js +498 -473
  34. package/src/i18n/ko.js +592 -567
  35. package/src/i18n/zh.js +498 -473
  36. package/src/oneshot.js +625 -549
  37. package/src/pack/tar.js +154 -132
  38. package/src/pack/zip.js +235 -217
  39. package/src/plugins/manage.js +416 -336
  40. package/src/providers/bedrock.js +17 -0
  41. package/src/repl.js +2616 -2515
  42. package/src/safety/audit.js +148 -129
  43. package/src/safety/guard.js +641 -526
  44. package/src/safety/network.js +200 -157
  45. package/src/tools/fastgrep.js +229 -214
  46. package/src/tools/fsutil.js +291 -250
  47. package/src/tools/index.js +2560 -2523
  48. package/src/tools/jobs.js +876 -795
  49. package/src/tools/label.js +52 -0
  50. package/src/tools/spawn.js +213 -99
  51. package/src/tools/verify.js +358 -357
  52. package/src/tools/webfetch.js +418 -393
  53. package/src/ui/export.js +233 -217
  54. package/src/ui/pick.js +115 -115
  55. package/src/ui/status.js +617 -610
package/src/i18n/ja.js CHANGED
@@ -1,473 +1,498 @@
1
- /**
2
- * 画面の言葉 — 日本語.
3
- *
4
- * 코드는 한국어 그대로다. 여기서 바꾸는 것은 **화면에 나가는 말**뿐이다.
5
- * 자리 이름({이름}·{n} 같은 것)은 코드가 그 이름으로 값을 넣으므로
6
- * **한 글자도 바꾸면 안 된다.** 바꾸면 그 자리가 중괄호째 화면에 찍힌다.
7
- *
8
- * 안 옮긴 열쇠는 영어 → 한국어 순으로 받친다(i18n/index.js). 빈칸은 안 낸다.
9
- */
10
- export const ja = {
11
- 'cmd.help.desc': 'コマンド一覧',
12
- 'cmd.clear.desc': '会話を消す',
13
- 'cmd.context.desc': 'コンテキストの使用量',
14
- 'cmd.ctx.desc': 'コンテキスト長 — このモデルで測り直すか、自分で決める',
15
- 'cmd.ctx.arg': '[auto|数値|640k]',
16
- 'cmd.out.desc': '1回の返答の上限 — 大きなファイルが途中で切れるなら上げる',
17
- 'cmd.out.arg': '[数値|32k|auto]',
18
- 'cmd.grade.desc': 'モデルの階級 — どこまで自力でやれるか。ウィンドウの大きさとは別の軸',
19
- 'cmd.grade.arg': '[small|medium|large|auto]',
20
- 'cmd.compact.desc': '古いやり取りを畳む',
21
- 'cmd.model.desc': '接続とモデルの切り替え · `card` はこのモデルがここで何をしたかを見せる',
22
- 'cmd.model.arg': '[名前|list|models|card]',
23
- 'cmd.think.desc': '思考の量 (off/low/medium/high/max)',
24
- 'cmd.think.arg': '<段階>',
25
-
26
- // ── /think 画面 ─────────────────────────────────────────────────────
27
- // 表の枠だけ訳して中身(段階の名前)を訳さないと何も読めない。
28
- // 段階名・配分名は agent/effort.js が持っている — modes.js と同じやり方。
29
- 'run.noTools': 'ツール呼び出しが確認できていません — deel diagnose で点検してください',
30
- 'think.effort': '思考の強さ',
31
- 'think.profile': '配分',
32
- 'think.detail': '詳しく',
33
- 'think.harder': 'もっと強く',
34
- 'think.faster': 'もっと速く',
35
- 'think.eg': '例',
36
- 'think.col.stage': '段階',
37
- 'think.col.level': '強さ',
38
- 'think.col.cap': '出力上限',
39
- 'think.col.when': 'いつ',
40
- 'think.cap.head': '出力上限は',
41
- 'think.cap.tail': ' の中で分け合います —',
42
- 'think.cap.you': '(ご自分で決めた値)',
43
- 'think.cap.server': '(サーバーから読み取った値)',
44
- 'think.cap.guess': '(分からないので既定値)',
45
- 'think.ctx': 'コンテキスト',
46
- 'think.ctx.used': ' · 使用中 ',
47
- 'think.nomodel': 'この接続ではモデル側の思考量の調整が効きません。',
48
- 'think.nomodel.note': '段階ごとの出力上限だけが効きます。',
49
-
50
- 'cmd.mode.desc': '承認の方針 — どこまで先に訊くか (auto/confirm/strict)',
51
- 'cmd.mode.arg': '<モード>',
52
- 'cmd.work.desc': '作業モード — どんな仕事か (auto では自動で選ばれる)',
53
- 'cmd.work.arg': '[モード]',
54
- 'cmd.auto.desc': '作業モード → auto (頼み事に合わせて自分で移る。/mode とは別)',
55
- 'cmd.code.desc': '作業モード → code (直して組み立てる)',
56
- 'cmd.plan.desc': '作業モード → plan (まず計画。ファイルは触らない)',
57
- 'cmd.architect.desc': '作業モード → architect (構造を決める)',
58
- 'cmd.debug.desc': '作業モード → debug (原因を突き止める)',
59
- 'cmd.ask.desc': '作業モード → ask (説明だけ)',
60
- 'cmd.orchestrator.desc': '作業モード → orchestrator (大きな仕事を分ける)',
61
- 'cmd.undo.desc': '直前のターンを戻す — ファイルと会話をまとめて',
62
- 'cmd.undo.arg': '[ターン数]',
63
- 'cmd.diff.desc': 'この会話で変わったファイルと、その中身',
64
- 'cmd.diff.arg': '[ファイル]',
65
- 'cmd.preview.desc': '作ったものをここで配信する — デプロイは要らない',
66
- 'cmd.preview.arg': '[フォルダ|off]',
67
- 'cmd.tools.desc': '使える道具を見る',
68
- 'cmd.skills.desc': 'スキルを探す・読み込む',
69
- 'cmd.skills.arg': '[search|all|off]',
70
- 'cmd.plugin.desc': 'プラグイン — 一覧・導入・削除・オフライン持ち込み用の梱包',
71
- 'cmd.plugin.arg': '[install|remove|pack]',
72
- 'cmd.cost.desc': 'この会話の使用量',
73
- 'cmd.status.desc': '接続の状態',
74
- 'cmd.scan.desc': 'このPCのローカルモデルサーバーを探す',
75
- 'cmd.scan.arg': '[save]',
76
- 'cmd.thread.desc': 'スレッド — 脇道に逸れる。接続と取り消し履歴は共有のまま',
77
- 'cmd.thread.arg': '[new|fork|close|番号|名前]',
78
- 'cmd.learned.desc': 'deel が自分で覚えたこと — ここで通るコマンド、このモデルの癖',
79
- 'cmd.learned.arg': '[clear]',
80
- 'cmd.pin.desc': '一行を留める — 畳んでも要約しても残る',
81
- 'cmd.pin.arg': '[文|clear 番号|clear all]',
82
- 'cmd.evidence.desc': '証拠 — 何が変わり、何がそれを裏づけるか。裏づけの無いものも言う',
83
- 'cmd.evidence.arg': '[ファイル]',
84
- 'cmd.commit.desc': 'コミット — この会話が変えたものだけを載せる。メッセージは差分と証拠から',
85
- 'cmd.review.desc': '変えたものを新しい窓でもう一度見る — 見つけたことだけ言い、何も直さない',
86
- 'cmd.paste.desc': 'クリップボードにある画面キャプチャを貼る (キャプチャ → /paste)',
87
- 'cmd.commit.arg': '[all|preview|題名]',
88
- 'cmd.sessions.desc': 'このフォルダに残っている会話',
89
- 'cmd.recall.desc': '過去の会話を探す — 題名ではなく中身で',
90
- 'cmd.recall.arg': '<文字列>',
91
- 'cmd.mcp.desc': 'つながっている MCP 道具サーバー',
92
- 'cmd.memory.desc': '会話をまたいで残るもの — 見る・消す',
93
- 'cmd.memory.arg': '[forget <n>|clear|<覚えさせる文>]',
94
- 'cmd.level.desc': '利用者の段階 (かんたん/開発者)',
95
- 'cmd.level.arg': '[段階]',
96
- 'cmd.keys.desc': 'キーを押して端末が実際に何を送るか見る — 改行が効かないとき',
97
- 'cmd.bell.desc': 'ターンの終わりや問いかけのときの音とウィンドウ題名 (on/off)',
98
- 'cmd.bell.arg': '[on|off]',
99
- 'cmd.motion.desc': '働いている間に動くもの — 騎士・動物・オフィス',
100
- 'cmd.motion.arg': '[knight|animal|office|default|off]',
101
- 'cmd.lang.desc': '画面の言葉 — 한국어 / English / 日本語 / 中文',
102
- 'cmd.lang.arg': '[ko|en|ja|zh] [指示の言葉]',
103
- 'cmd.init.desc': 'DEEL.md の規則ファイルを作る',
104
- 'cmd.exit.desc': '終わる',
105
- 'cmd.quit.desc': '終わる',
106
- 'cmd.consult.desc': '別のモデルに一つだけ訊く — 今のモデルはそのまま',
107
- 'cmd.consult.arg': '[プロフィール <質問>]',
108
- 'consult.title': 'このPCに設定されているモデル',
109
- 'consult.noProfiles': 'プロフィールがありません。/scan でローカルサーバーを探してください。',
110
- 'consult.current': '(使用中)',
111
- 'consult.usage': '使い方: /consult <プロフィール> <質問> 例: /consult small この正規表現は何をしますか',
112
- 'consult.questionOnly': '送るのは質問だけです — この会話は付いていきません。必要な背景は質問の中に書いてください。',
113
- 'consult.candidates': '当てはまるもの:',
114
- 'consult.have': 'あるもの:',
115
- 'consult.needQuestion': '{이름} に訊きたいことを書いてください。例: /consult {이름} このエラーは何ですか',
116
- 'consult.goesOut': '— この質問はこのPCの外へ出ます',
117
- 'consult.asking': '{모델} に訊いています…',
118
- 'consult.system': 'あなたは別のコーディングエージェントから相談を受けているモデルです。短く正確に答えてください。分からないことは分からないと言ってください。訊かれているのであって、ファイルを直せと言われているのではありません。',
119
- 'consult.failed': '訊けませんでした — {왜}',
120
- 'consult.empty': '返答が空でした。そのモデルは道具なしでは答えないのかもしれません。',
121
- 'consult.added': 'その答えを、誰が言ったか付けて会話に足しました。',
122
- 'probe.codexOnly': '{모델} 系列はこの窓口(/chat/completions)では出てきません — OpenAI が Responses API(/responses)でのみ提供しているモデルで、deel はまだその窓口を使えません。今は別のモデルを選んでください。',
123
- 'head.spec.ollama': 'Ollama 独自規格',
124
- 'head.spec.openai': 'OpenAI 互換 API',
125
- 'head.spec.anthropic': 'Anthropic API',
126
- 'head.mode.default': 'この中(既定)',
127
- 'head.mode.online': '外(online)',
128
- 'head.mode.offline': '封印(offline)',
129
- 'head.model': 'モデル',
130
- 'head.tokens': 'トークン',
131
- 'head.grade': '階級',
132
- 'head.guess': '推定',
133
- 'head.send': '送り先',
134
- 'head.inside': 'このPCの中',
135
- 'head.outside': '外',
136
- 'head.offlineLock': '[オフライン固定]',
137
- 'head.viaProxy': 'プロキシ {프록시} 経由',
138
- 'head.proxyBad': '[プロキシ設定が使えません — /status を見てください]',
139
- 'head.nowhereElse': '← ここ以外へは出ません',
140
- 'head.glyphHint': '状態バーの先頭の {안} がこれを表します。外へ出るときは {밖} に変わります。',
141
- 'head.conn': '接続',
142
- 'head.streaming': 'ストリーミング',
143
- 'head.noStreaming': 'ストリーミングなし',
144
- 'head.tools': '道具',
145
- 'head.toolsUnknown': '道具は未確認',
146
- 'head.thinkCtl': '思考量の制御',
147
- 'head.noThinkCtl': '思考量の制御なし',
148
- 'head.folder': 'フォルダ',
149
- 'head.approve': '承認',
150
- 'head.shiftTab': 'Shift+Tab',
151
- 'head.shiftTabHint': ' で切り替え · ',
152
- 'head.tabHint': 'Tab で書きかけの / コマンドが埋まります',
153
- 'head.newlineHint': '改行: Alt+Enter (Mac は Option+Enter) で箱の中を改行 · 端末が飲み込むなら 行末に空白と ` を置いて Enter',
154
- 'head.star': 'この道具が気に入ったら GitHub で Star を —',
155
- 'head.thisPC': '見つかりました',
156
- 'head.skills': 'スキル {n}',
157
- 'head.commands': 'コマンド {n}',
158
- 'head.plugins': 'プラグイン {n}',
159
- 'grade.small': '小',
160
- 'grade.medium': '中',
161
- 'grade.large': '大',
162
- 'head.gradeSuffix': ' · {급} {급이름}{짐작}',
163
- 'seg.dir': '作業フォルダ (前の ⌂/↗ が、書いたものがどこへ行くかを表します)',
164
- 'seg.ver': 'バージョン',
165
- 'seg.thread': 'スレッド',
166
- 'seg.model': 'モデル名',
167
- 'seg.grade': 'モデルの階級 (どこまで自力でやるか)',
168
- 'seg.ctx': '使ったコンテキスト (目盛りは畳みと要約が始まる位置)',
169
- 'seg.work': '作業モード',
170
- 'seg.think': '思考の量と配分',
171
- 'seg.mode': '承認の方針',
172
- 'seg.edits': 'この会話で変わったファイル',
173
- 'seg.verify': '実際に確かめたもの',
174
- 'seg.undoable': 'まだ戻せるターン',
175
- 'seg.tok': '入出力トークン',
176
- 'seg.cost': '使った金額(料金が分かるときだけ)',
177
- 'seg.tools': '道具の呼び出し',
178
- 'seg.skills': 'このPCで見つかったスキル',
179
- 'seg.time': '始めてからの時間',
180
- 'intro.inside': 'このPCから出ません',
181
- 'intro.outside': 'このPCの外へ出ます',
182
- 'undo.nothing': '戻すものがありません。',
183
- 'undo.done': '{turns} ターン戻しました · ファイル {files} 個を元に戻しました。',
184
- 'undo.alsoTalk': 'メッセージも {n} 件戻しました — 戻したコードがまだあるとモデルが思っていると、その上に積み上げてしまいます。',
185
- 'undo.repaired': '(宙に浮いた道具呼び出し {n} 件も片づけました)',
186
- 'undo.saidWas': 'あなたはこう頼んでいました:',
187
- 'undo.failed': '{n}個は戻せませんでした — そのファイルは直したままです。控えは残してあるので /undo をもう一度試してください。',
188
- 'undo.talkKept': '会話はそのままです — そのターンはすでに畳まれていました。',
189
- 'undo.talkKeptWhy': '戻した作業がまだあるとモデルが思っている可能性があるので、次の一言で触れてください。',
190
- 'bell.stateOn': 'オン',
191
- 'bell.stateOff': 'オフ',
192
- 'bell.now': 'ベルは {상태} です。',
193
- 'bell.when': 'ターンが {초} 秒を超えたときに一度、そして deel があなたの答えを要るときに鳴ります。',
194
- 'bell.title': 'ウィンドウ題名にも状態が出ます — タブを見るだけで、まだ働いているか分かります。',
195
- 'bell.howto': '変えるには',
196
- 'bell.notATty': '(今は端末ではないので、ベルも題名もありません — パイプが壊れます。)',
197
- 'bell.needOnOff': 'on か off と言ってください。',
198
- 'bell.turnedOn': 'ベルをオンにしました。',
199
- 'bell.turnedOff': 'ベルをオフにしました。',
200
- 'bell.justRang': '今のが一回です。聞こえなければ端末のベル設定を見てください。',
201
- 'bell.appliesNow': 'この会話にすぐ効きます。',
202
- 'motion.now': '今:',
203
- 'motion.plain': '一マスの回転。静かです',
204
- 'motion.knight': '騎士が剣を振ります。たまに潰れます',
205
- 'motion.animal': 'ドット絵の動物が歩き回ります',
206
- 'motion.office': '入力欄の上に十二行のオフィス — 仕事を一部屋として',
207
- 'motion.off': '何も描きません (スクリーンリーダー向け)',
208
- 'motion.set': '{것} に変えました。',
209
- 'motion.appliesNow': '次の描画から見えます。設定にも残しました。',
210
- 'motion.unknown': '"{값}" はその中にありません。',
211
- 'motion.pickOne': 'この中から選んでください:',
212
- 'motion.envWins': 'DEEL_MOTION / DEEL_OFFICE が設定されていて、そちらが優先されます。',
213
- 'motion.tooSmall': 'この端末は {줄} x {칸} です — オフィスには少なくとも {최소줄} 行 {최소칸} 桁が要ります。',
214
- 'motion.appleTerminal': 'macOS の Terminal は行間を空けるので部屋に横筋が入ります — Terminal › 設定 › プロファイル › テキスト › フォント「変更」› 行間を 1.0 に。(iTerm2 は既定が 1.0 なので、あちらでは綺麗に出ます)',
215
- 'lang.now': '画面の言葉は {이름} です。',
216
- 'lang.ko': '한국어 (韓国語)',
217
- 'lang.en': 'English (英語)',
218
- 'lang.ja': '日本語',
219
- 'lang.zh': '中文 (中国語)',
220
- 'lang.howto': '変えるには',
221
- 'lang.changed': '画面の言葉を {이름} にしました。',
222
- 'lang.unknown': 'ko · en · ja · zh のいずれかを指定してください。',
223
- 'lang.progress': '{언어}: {전체} 個のうち {옮김} 個が訳されています。残りは英語か韓国語のまま出ます。',
224
- 'lang.partial': 'まだ全部は訳せていません — 訳していない行は空白ではなく英語か韓国語で出します。',
225
- 'lang.codeStays': '別に指定しない限り、モデルが読む言葉は画面に合わせます。コード・道具名・引数名はそのままです。',
226
- 'lang.promptNow': 'モデルへの指示は {이름} です。',
227
- 'lang.follows': '画面と同じ',
228
- 'lang.splitHowto': '英語で指示して日本語で受け取るには:',
229
- 'lang.promptChanged': '指示は {이름}、返答は {답} — 8k のウィンドウで固定分が 23% 減ります。',
230
- 'lang.envHint': '毎回その言葉で始めるには DEEL_LANG=ja のように設定してください',
231
- 'cmd.lsp.desc': '言語サーバー — 何が入っていて、Def/Refs が使えるか',
232
- 'cmd.lsp.arg': '[on|off]',
233
- 'lsp.found': 'このPCに言語サーバーが {수} 個',
234
- 'lsp.none': 'このPCに言語サーバーがありません。Grep と Outline に戻ります。',
235
- 'lsp.thisFolder': 'このフォルダの言語:',
236
- 'lsp.noneHere': '使えるものなし',
237
- 'lsp.fileCount': 'ファイル {수} 個',
238
- 'lsp.tools': '道具:',
239
- 'lsp.toolsHidden': '隠しています (ここにサーバーがありません)',
240
- 'lsp.diag': '編集後の診断:',
241
- 'lsp.stateOn': 'オン',
242
- 'lsp.stateOff': 'オフ',
243
- 'lsp.ready': '準備できています',
244
- 'lsp.starting': '起動中',
245
- 'lsp.diagOn': '編集後の診断をオンにしました。',
246
- 'lsp.diagOff': '編集後の診断をオフにしました。Def と Refs はそのまま使えます。',
247
- 'lsp.installHint': '入れると Def / Refs が出ます:',
248
- 'lsp.neverInstalls': 'deel は何も入れません。上はあなたが自分で打つコマンドです。',
249
- 'lsp.howto': '編集後の診断を入り切りする:',
250
- 'cmd.export.desc': 'この会話を一枚の HTML 報告に — 頼んだこと・変わったこと・確かめたこと',
251
- 'cmd.export.arg': '[ファイル名]',
252
- 'export.untitled': '題名のない会話',
253
- 'export.model': 'モデル',
254
- 'export.calls': '道具の呼び出し {수} 回',
255
- 'export.conversation': '訊いたことと答えたこと',
256
- 'export.you': 'あなた',
257
- 'export.nothing': '何も言われていません。',
258
- 'export.changed': '変わったファイル',
259
- 'export.file': 'ファイル',
260
- 'export.times': '回数',
261
- 'export.noChanges': '変わったファイルはありません。',
262
- 'export.evidence': '実際に走らせたもの',
263
- 'export.nothingRan': '走らせたコマンドはありません。',
264
- 'export.unproven': '裏づけなし',
265
- 'export.allProven': 'ありません — すべての変更に、後から確かめた記録があります。',
266
- 'export.footer': 'deel が作った報告です。外へのリンクはありません — どのネットワークでも開きます。',
267
- 'export.saved': '報告を保存しました:',
268
- 'export.openHint': 'ダブルクリックで開きます。そのままレビューや報告に添えられます。',
269
- 'export.failed': '報告を保存できませんでした。フォルダの権限を確かめてください。',
270
- 'help.titleCommon': 'コマンド (よく使うもの)',
271
- 'help.title': 'コマンド',
272
- 'help.moreHidden': 'あと {n} 個あります — 打てば同じように動きます。',
273
- 'help.showAll': '全部見るには',
274
- 'help.restGoesToModel': 'それ以外はモデルへ行きます。空の行で Ctrl+C を押すと終わります。',
275
- 'approve.auto.name': '自動承認',
276
- 'approve.auto.short': '自動',
277
- 'approve.auto.line': '訊かずに直します。/undo が受け皿です',
278
- 'approve.confirm.name': '危ないものだけ',
279
- 'approve.confirm.short': '危険時',
280
- 'approve.confirm.line': '取り消せないコマンドの前に訊きます。ファイルは訊かずに直します',
281
- 'approve.strict.name': '毎回訊く',
282
- 'approve.strict.short': '毎回',
283
- 'approve.strict.line': 'ファイルを直すたび、コマンドを打つたびに訊きます',
284
- 'level.beginner.name': 'かんたん',
285
- 'level.beginner.hint': '勧められた設定のまま始めます',
286
- 'level.developer.name': '開発者',
287
- 'level.developer.hint': '全部自分で決めます',
288
- 'plan.ask': 'この通り進めますか?',
289
- 'plan.hint': '⏎ 進む · y 一言添えて進む · 3 その段階に一言 · n やめる',
290
- 'plan.cancelled': 'やめました。計画は上に残っているので、続きから言ってください。',
291
- 'plan.going': '計画どおり進めます。',
292
- 'plan.goingWith': '一言を添えて進めます — {말}',
293
- 'plan.replan': 'その点を踏まえて計画を出し直します。',
294
- 'plan.replanStep': '{단계}段階についての言葉を踏まえて計画を出し直します。',
295
- 'ask.title': 'お訊きします',
296
- 'ask.pickHint': '番号を選んでください。言いたいことがあれば後ろに付けられます (2 ファイルは分けて)',
297
- 'ask.freeHint': '答えを書いてください',
298
- 'ask.pickPrompt': '1-{끝}(後ろに一言添えても可)、または自分で書く',
299
- 'ask.freePrompt': '答え',
300
- 'ask.stopped': '止めました — 答えなかったものとして進みます。',
301
- 'loop.backoff': 'サーバーに押し返されました ({무엇}) — {초} 秒後にもう一度 ({n}/{max})',
302
- 'cost.retries': '再試行',
303
- // ── 数える言葉 ────────────────────────────────────────────────────────
304
- 'unit.files': 'ファイル{n}個',
305
- 'unit.files1': 'ファイル1個',
306
- 'unit.hits': '{n}件',
307
- 'unit.hits1': '1件',
308
- 'unit.lines': '{n}行',
309
- 'unit.lines1': '1行',
310
- 'unit.spots': '{n}箇所',
311
- 'unit.spots1': '1箇所',
312
- 'unit.places': '{n}箇所',
313
- 'unit.places1': '1箇所',
314
- 'unit.count': '{n}個',
315
- 'unit.count1': '1個',
316
- 'unit.chars': '{n}文字',
317
- 'unit.kchars': '{n}k文字',
318
- 'unit.calls': '{n}回',
319
- 'unit.sec': '{n}秒',
320
- 'unit.min': '{n}分',
321
-
322
- 'sum.done': '完了',
323
- 'sum.ok': '成功',
324
- 'sum.exitCode': '終了コード {code}',
325
- 'sum.killedBy': '{시그널} で終了',
326
- 'sum.tooMuchOut': '出力が多すぎて途中で打ち切りました',
327
- 'sum.cantRun': '実行できませんでした ({왜})',
328
- 'sum.partial': '一部のみ',
329
- 'sum.cut': '一部省略',
330
- 'sum.notAllSeen': '全部は見ていない',
331
- 'sum.filesFailed': '{n}個失敗',
332
- 'sum.spotsFailed': '{n}箇所失敗',
333
- 'sum.moved': '{n}個移動',
334
- 'sum.total': '全体{줄}',
335
- 'sum.addedLines': '+{줄}',
336
- 'sum.noVision': 'このモデルは画像を見られません',
337
- 'sum.emptyAnswer': '空の返答',
338
- 'sum.unread': '読めず{n}個',
339
- 'sum.doneOf': '{끝}/{전체} 完了',
340
- 'sum.justDone': 'たった今{n}個',
341
- 'sum.noChange': '変更なし',
342
- 'sum.verified': '確認{n}個',
343
- 'sum.readAs': '{쓴것} で変換して読み込み',
344
- 'sum.encGuess': '{인코딩}(推定)',
345
- 'sum.linesOf': '{준}/{전체}行',
346
- 'sum.countOf': '{n}/{전체}個',
347
- 'sum.remembered': '覚えました({n}行)',
348
- 'sum.rememberFull': '場所が埋まったので古いものを外しました',
349
- 'sum.recall': '過去の会話 {전체}件中 {맞음}件',
350
- 'sum.jobStarted': '{n}番で起動',
351
- 'sum.jobRunning': '実行中',
352
- 'sum.jobEndedAlready': 'すでに終了',
353
- 'sum.jobNotStopped': '終わっていません — まだ生きています',
354
- 'sum.jobStopped': '終了',
355
-
356
- 'tier.exact': '完全一致',
357
- 'tier.trail': '行末の空白・改行の違いを無視',
358
- 'tier.indent': 'インデントの違いを無視',
359
- 'tier.space': 'すべての空白の違いを無視',
360
-
361
- 'sum.image': '画像',
362
- 'sum.imageDropped': '画像 {크기} を省略',
363
-
364
- 'sum.broken': '不具合{n}件',
365
- 'sum.unverified': '未確認{n}件',
366
- 'lsp.noDef': '定義が見つかりません。Grep で探してください。',
367
- 'lsp.defs': '定義 {n}',
368
- 'lsp.noRefs': '使っている場所がありません。',
369
- 'lsp.refs': '使用箇所 {자리} · ファイル {파일}',
370
-
371
- 'sum.nothingToCheck': '確かめるものがありませんでした',
372
- 'job.no': '{n}番',
373
- 'job.stop': '終了',
374
- 'more.files': 'ほか{n}個',
375
- 'more.spots': 'ほか{n}箇所',
376
-
377
- 'err.noSuchFile': 'ファイルがありません: {경로}',
378
- 'err.alreadyThere': 'すでにあります: {경로}',
379
- 'err.overwriteHint': '上書きするには overwrite: true を指定してください。',
380
-
381
- 'run.ctxProbe': 'モデルに設定されたコンテキスト長を確認中…',
382
- 'run.noStream': 'ストリーミングがないので返答は一度に出ます',
383
- 'run.hintHelp': '/help コマンド一覧',
384
- 'run.hintEsc': 'ESC 中断',
385
- 'run.hintQuit': 'Ctrl+C 中断・終了',
386
- 'run.stopping': '止めています…',
387
- 'run.errKept': 'ここまで届いた分は会話に残しました — このまま続けて話せます。',
388
- 'ev.capped': '答えが {한계} トークンで切れました — /out で上限を上げるか、ファイルは分けて書かせてください',
389
- 'ev.cutoff': 'サーバーが終わったとも言わずに答えを止めました — 途中で切れた可能性があります',
390
- 'ev.nudgeMissed': '頼んだこと {n} 件を残したまま終えようとしたので、一度押し戻しました',
391
- 'ev.nudgeRead': '読むだけで終えようとしたので、一度押し戻しました',
392
- 'ev.learnedCtx': 'サーバーが教えてくれたコンテキスト上限 {한계} に合わせて呼び直します',
393
- 'ev.learnedOut': 'サーバーが教えてくれた答えの長さ上限 {한계} に合わせて呼び直します',
394
- 'ev.reset': '場所が足りず、前の会話 {버린수} 件を消して続けます — 残りのやること {할일} 件',
395
- 'ev.resetBare': '場所が足りず、前の会話 {버린수} 件を消して続けます',
396
- 'paste.chip': '貼り付け',
397
- 'paste.chipLines': '{n}行',
398
- 'paste.folded': '{표} — たたんでおきました。送るときにそのまま開きます。',
399
- 'paste.pasted': '{n}行を貼り付けました — Enter で一度に送ります',
400
- 'run.thinking': '考え中…',
401
- 'run.thinkingChars': '考え中… {n}文字',
402
- 'run.turnFoot': '{초}秒 · ツール{n}回 · ↑{입력} ↓{출력}',
403
- 'run.bye': '終了します。',
404
- 'run.byeStats': 'モデル呼び出し{n}回 · ツール時間{초}秒 · ↑{입력} ↓{출력}',
405
- 'run.notMade': '— 作られませんでした',
406
- 'store.notSaving': 'この会話がファイルに書けていません ({까닭}) — {n}行を失いました。このまま閉じると再開できません。',
407
-
408
- 'stage.plan': '最初の判断',
409
- 'stage.work': '続き',
410
- 'stage.fix': '詰まったとき',
411
-
412
- 'scr.tools': 'ツール',
413
- 'scr.conn': '接続',
414
- 'scr.session': 'このセッション',
415
- 'status.kind': '規格',
416
- 'status.url': 'アドレス',
417
- 'status.proxy': 'プロキシ',
418
- 'status.proxyOff': '使えません',
419
- 'status.model': 'モデル',
420
- 'status.root': '作業フォルダ',
421
- 'status.shell': 'シェル',
422
- 'status.keyStore': '鍵の保管',
423
- 'status.rules': 'ルール',
424
- 'status.noRules': 'なし(/init で作れます)',
425
- 'status.rulesUnread': '{이름} はありますが読めませんでした({까닭})— このフォルダのルールは効いていません',
426
- 'status.caps': '対応',
427
- 'status.capTools': 'ツール',
428
- 'status.capStream': 'ストリーム',
429
- 'status.capSchema': 'スキーマ',
430
- 'status.capThink': '推論',
431
- 'cost.calls': 'モデル呼び出し',
432
- 'cost.tokIn': '入力トークン',
433
- 'cost.tokOut': '出力トークン',
434
- 'cost.toolMs': 'ツール時間',
435
- 'cost.elapsed': '経過',
436
- 'cost.money': '料金',
437
- 'cost.quota': 'サーバー残量',
438
- 'cost.quotaAge': '{초}秒前の応答基準',
439
-
440
- 'scr.context': 'コンテキスト',
441
- 'unit.tokens': '{n} トークン',
442
- 'ctx.system': 'システムプロンプト',
443
- 'ctx.rules': 'ルール ({이름})',
444
- 'ctx.rulesNone': 'ルール (なし)',
445
- 'ctx.memory': '記憶 ({n}行)',
446
- 'ctx.learned': 'ここで分かったこと',
447
- 'ctx.skills': 'スキル一覧 ({실림}/{전체})',
448
- 'ctx.tools': '道具の定義',
449
- 'ctx.history': '会話の履歴',
450
- 'ctx.toolResults': '道具の結果 (ファイル{n}個)',
451
- 'ctx.left': '残り',
452
- 'ctx.compactHint': '会話を畳む',
453
- 'ctx.clearHint': 'まるごと消す',
454
- 'ctx.calibrated': 'サーバーの実測値に合わせて {부호}{퍼센트}% 補正しました ({}回計測)。',
455
- 'ctx.estimate': '数字は推定です正確なトークナイザーは使っていません。',
456
-
457
- 'auth.waiting': '社内ログインを待っています…',
458
- 'auth.got': '鍵を受け取りました — 約{}分使えます',
459
- 'auth.failed': '鍵を受け取れませんでした{왜}',
460
- 'auth.from': '取得',
461
- 'auth.fromPolicy': '取得(管理ポリシー)',
462
- 'auth.leftMin': '残り{분}分',
463
- 'auth.notYet': 'まだ取得していません',
464
-
465
- 'undo.wayRestored': '戻しました',
466
- 'undo.wayDeleted': '削除(元々なかったファイル)',
467
-
468
- 'common.unknownCommand': '知らないコマンド',
469
- 'common.seeHelp': '/help で一覧が出ます',
470
- 'common.yes': 'はい',
471
- 'common.no': 'いいえ',
472
- 'common.cfgSaveFailed': '設定をファイルに保存できませんでした({})— 今回は効きますが、開き直すと元に戻ります。',
473
- };
1
+ /**
2
+ * 画面の言葉 — 日本語.
3
+ *
4
+ * 코드는 한국어 그대로다. 여기서 바꾸는 것은 **화면에 나가는 말**뿐이다.
5
+ * 자리 이름({이름}·{n} 같은 것)은 코드가 그 이름으로 값을 넣으므로
6
+ * **한 글자도 바꾸면 안 된다.** 바꾸면 그 자리가 중괄호째 화면에 찍힌다.
7
+ *
8
+ * 안 옮긴 열쇠는 영어 → 한국어 순으로 받친다(i18n/index.js). 빈칸은 안 낸다.
9
+ */
10
+ export const ja = {
11
+ 'cmd.help.desc': 'コマンド一覧',
12
+ 'cmd.clear.desc': '会話を消す',
13
+ 'cmd.context.desc': 'コンテキストの使用量',
14
+ 'cmd.ctx.desc': 'コンテキスト長 — このモデルで測り直すか、自分で決める',
15
+ 'cmd.ctx.arg': '[auto|数値|640k]',
16
+ 'cmd.out.desc': '1回の返答の上限 — 大きなファイルが途中で切れるなら上げる',
17
+ 'cmd.out.arg': '[数値|32k|auto]',
18
+ 'cmd.grade.desc': 'モデルの階級 — どこまで自力でやれるか。ウィンドウの大きさとは別の軸',
19
+ 'cmd.grade.arg': '[small|medium|large|auto]',
20
+ 'cmd.compact.desc': '古いやり取りを畳む',
21
+ 'cmd.model.desc': '接続とモデルの切り替え · `card` はこのモデルがここで何をしたかを見せる',
22
+ 'cmd.model.arg': '[名前|list|models|card]',
23
+ 'cmd.think.desc': '思考の量 (off/low/medium/high/max)',
24
+ 'cmd.think.arg': '<段階>',
25
+
26
+ // ── /think 画面 ─────────────────────────────────────────────────────
27
+ // 表の枠だけ訳して中身(段階の名前)を訳さないと何も読めない。
28
+ // 段階名・配分名は agent/effort.js が持っている — modes.js と同じやり方。
29
+ 'run.noTools': 'ツール呼び出しが確認できていません — deel diagnose で点検してください',
30
+ 'think.effort': '思考の強さ',
31
+ 'think.profile': '配分',
32
+ 'think.detail': '詳しく',
33
+ 'think.harder': 'もっと強く',
34
+ 'think.faster': 'もっと速く',
35
+ 'think.eg': '例',
36
+ 'think.col.stage': '段階',
37
+ 'think.col.level': '強さ',
38
+ 'think.col.cap': '出力上限',
39
+ 'think.col.when': 'いつ',
40
+ 'think.cap.head': '出力上限は',
41
+ 'think.cap.tail': ' の中で分け合います —',
42
+ 'think.cap.you': '(ご自分で決めた値)',
43
+ 'think.cap.server': '(サーバーから読み取った値)',
44
+ 'think.cap.guess': '(分からないので既定値)',
45
+ 'think.ctx': 'コンテキスト',
46
+ 'think.ctx.used': ' · 使用中 ',
47
+ 'think.nomodel': 'この接続ではモデル側の思考量の調整が効きません。',
48
+ 'think.nomodel.note': '段階ごとの出力上限だけが効きます。',
49
+
50
+ 'cmd.mode.desc': '承認の方針 — どこまで先に訊くか (auto/confirm/strict)',
51
+ 'cmd.mode.arg': '<モード>',
52
+ 'cmd.work.desc': '作業モード — どんな仕事か (auto では自動で選ばれる)',
53
+ 'cmd.work.arg': '[モード]',
54
+ 'cmd.auto.desc': '作業モード → auto (頼み事に合わせて自分で移る。/mode とは別)',
55
+ 'cmd.code.desc': '作業モード → code (直して組み立てる)',
56
+ 'cmd.plan.desc': '作業モード → plan (まず計画。ファイルは触らない)',
57
+ 'cmd.architect.desc': '作業モード → architect (構造を決める)',
58
+ 'cmd.debug.desc': '作業モード → debug (原因を突き止める)',
59
+ 'cmd.ask.desc': '作業モード → ask (説明だけ)',
60
+ 'cmd.orchestrator.desc': '作業モード → orchestrator (大きな仕事を分ける)',
61
+ 'cmd.undo.desc': '直前のターンを戻す — ファイルと会話をまとめて',
62
+ 'cmd.undo.arg': '[ターン数]',
63
+ 'cmd.diff.desc': 'この会話で変わったファイルと、その中身',
64
+ 'cmd.diff.arg': '[ファイル]',
65
+ 'cmd.preview.desc': '作ったものをここで配信する — デプロイは要らない',
66
+ 'cmd.preview.arg': '[フォルダ|off]',
67
+ 'cmd.tools.desc': '使える道具を見る',
68
+ 'cmd.skills.desc': 'スキルを探す・読み込む',
69
+ 'cmd.skills.arg': '[search|all|off]',
70
+ 'cmd.plugin.desc': 'プラグイン — 一覧・導入・削除・オフライン持ち込み用の梱包',
71
+ 'cmd.plugin.arg': '[install|remove|pack]',
72
+ 'cmd.cost.desc': 'この会話の使用量',
73
+ 'cmd.status.desc': '接続の状態',
74
+ 'cmd.scan.desc': 'このPCのローカルモデルサーバーを探す',
75
+ 'cmd.scan.arg': '[save]',
76
+ 'cmd.thread.desc': 'スレッド — 脇道に逸れる。接続と取り消し履歴は共有のまま',
77
+ 'cmd.thread.arg': '[new|fork|close|番号|名前]',
78
+ 'cmd.learned.desc': 'deel が自分で覚えたこと — ここで通るコマンド、このモデルの癖',
79
+ 'cmd.learned.arg': '[clear]',
80
+ 'cmd.pin.desc': '一行を留める — 畳んでも要約しても残る',
81
+ 'cmd.pin.arg': '[文|clear 番号|clear all]',
82
+ 'cmd.evidence.desc': '証拠 — 何が変わり、何がそれを裏づけるか。裏づけの無いものも言う',
83
+ 'cmd.evidence.arg': '[ファイル]',
84
+ 'cmd.commit.desc': 'コミット — この会話が変えたものだけを載せる。メッセージは差分と証拠から',
85
+ 'cmd.review.desc': '変えたものを新しい窓でもう一度見る — 見つけたことだけ言い、何も直さない',
86
+ 'cmd.paste.desc': 'クリップボードにある画面キャプチャを貼る (キャプチャ → /paste)',
87
+ 'cmd.commit.arg': '[all|preview|題名]',
88
+ 'cmd.sessions.desc': 'このフォルダに残っている会話',
89
+ 'cmd.recall.desc': '過去の会話を探す — 題名ではなく中身で',
90
+ 'cmd.recall.arg': '<文字列>',
91
+ 'cmd.mcp.desc': 'つながっている MCP 道具サーバー',
92
+ 'cmd.memory.desc': '会話をまたいで残るもの — 見る・消す',
93
+ 'cmd.memory.arg': '[forget <n>|clear|<覚えさせる文>]',
94
+ 'cmd.level.desc': '利用者の段階 (かんたん/開発者)',
95
+ 'cmd.level.arg': '[段階]',
96
+ 'cmd.keys.desc': 'キーを押して端末が実際に何を送るか見る — 改行が効かないとき',
97
+ 'cmd.bell.desc': 'ターンの終わりや問いかけのときの音とウィンドウ題名 (on/off)',
98
+ 'cmd.bell.arg': '[on|off]',
99
+ 'cmd.motion.desc': '働いている間に動くもの — 騎士・動物・オフィス',
100
+ 'cmd.motion.arg': '[knight|animal|office|default|off]',
101
+ 'cmd.lang.desc': '画面の言葉 — 한국어 / English / 日本語 / 中文',
102
+ 'cmd.lang.arg': '[ko|en|ja|zh] [指示の言葉]',
103
+ 'cmd.init.desc': 'DEEL.md の規則ファイルを作る',
104
+ 'cmd.exit.desc': '終わる',
105
+ 'cmd.quit.desc': '終わる',
106
+ 'cmd.consult.desc': '別のモデルに一つだけ訊く — 今のモデルはそのまま',
107
+ 'cmd.consult.arg': '[プロフィール <質問>]',
108
+ 'consult.title': 'このPCに設定されているモデル',
109
+ 'consult.noProfiles': 'プロフィールがありません。/scan でローカルサーバーを探してください。',
110
+ 'consult.current': '(使用中)',
111
+ 'consult.usage': '使い方: /consult <プロフィール> <質問> 例: /consult small この正規表現は何をしますか',
112
+ 'consult.questionOnly': '送るのは質問だけです — この会話は付いていきません。必要な背景は質問の中に書いてください。',
113
+ 'consult.candidates': '当てはまるもの:',
114
+ 'consult.have': 'あるもの:',
115
+ 'consult.needQuestion': '{이름} に訊きたいことを書いてください。例: /consult {이름} このエラーは何ですか',
116
+ 'consult.goesOut': '— この質問はこのPCの外へ出ます',
117
+ 'consult.asking': '{모델} に訊いています…',
118
+ 'consult.system': 'あなたは別のコーディングエージェントから相談を受けているモデルです。短く正確に答えてください。分からないことは分からないと言ってください。訊かれているのであって、ファイルを直せと言われているのではありません。',
119
+ 'consult.failed': '訊けませんでした — {왜}',
120
+ 'consult.empty': '返答が空でした。そのモデルは道具なしでは答えないのかもしれません。',
121
+ 'consult.added': 'その答えを、誰が言ったか付けて会話に足しました。',
122
+ 'probe.codexOnly': '{모델} 系列はこの窓口(/chat/completions)では出てきません — OpenAI が Responses API(/responses)でのみ提供しているモデルで、deel はまだその窓口を使えません。今は別のモデルを選んでください。',
123
+ 'head.spec.ollama': 'Ollama 独自規格',
124
+ 'head.spec.openai': 'OpenAI 互換 API',
125
+ 'head.spec.anthropic': 'Anthropic API',
126
+ 'head.mode.default': 'この中(既定)',
127
+ 'head.mode.online': '外(online)',
128
+ 'head.mode.offline': '封印(offline)',
129
+ 'head.model': 'モデル',
130
+ 'head.tokens': 'トークン',
131
+ 'head.grade': '階級',
132
+ 'head.guess': '推定',
133
+ 'head.send': '送り先',
134
+ 'head.inside': 'このPCの中',
135
+ 'head.outside': '外',
136
+ 'head.offlineLock': '[オフライン固定]',
137
+ 'head.viaProxy': 'プロキシ {프록시} 経由',
138
+ 'head.proxyBad': '[プロキシ設定が使えません — /status を見てください]',
139
+ 'head.nowhereElse': '← ここ以外へは出ません',
140
+ 'head.glyphHint': '状態バーの先頭の {안} がこれを表します。外へ出るときは {밖} に変わります。',
141
+ 'head.conn': '接続',
142
+ 'head.streaming': 'ストリーミング',
143
+ 'head.noStreaming': 'ストリーミングなし',
144
+ 'head.tools': '道具',
145
+ 'head.toolsUnknown': '道具は未確認',
146
+ 'head.thinkCtl': '思考量の制御',
147
+ 'head.noThinkCtl': '思考量の制御なし',
148
+ 'head.folder': 'フォルダ',
149
+ 'head.approve': '承認',
150
+ 'head.shiftTab': 'Shift+Tab',
151
+ 'head.shiftTabHint': ' で切り替え · ',
152
+ 'head.tabHint': 'Tab で書きかけの / コマンドが埋まります',
153
+ 'head.newlineHint': '改行: Alt+Enter (Mac は Option+Enter) で箱の中を改行 · 端末が飲み込むなら 行末に空白と ` を置いて Enter',
154
+ 'head.star': 'この道具が気に入ったら GitHub で Star を —',
155
+ 'head.thisPC': '見つかりました',
156
+ 'head.skills': 'スキル {n}',
157
+ 'head.commands': 'コマンド {n}',
158
+ 'head.plugins': 'プラグイン {n}',
159
+ 'grade.small': '小',
160
+ 'grade.medium': '中',
161
+ 'grade.large': '大',
162
+ 'head.gradeSuffix': ' · {급} {급이름}{짐작}',
163
+ 'seg.dir': '作業フォルダ (前の ⌂/↗ が、書いたものがどこへ行くかを表します)',
164
+ 'seg.ver': 'バージョン',
165
+ 'seg.thread': 'スレッド',
166
+ 'seg.model': 'モデル名',
167
+ 'seg.grade': 'モデルの階級 (どこまで自力でやるか)',
168
+ 'seg.ctx': '使ったコンテキスト (目盛りは畳みと要約が始まる位置)',
169
+ 'seg.work': '作業モード',
170
+ 'seg.think': '思考の量と配分',
171
+ 'seg.mode': '承認の方針',
172
+ 'seg.edits': 'この会話で変わったファイル',
173
+ 'seg.verify': '実際に確かめたもの',
174
+ 'seg.undoable': 'まだ戻せるターン',
175
+ 'seg.tok': '入出力トークン',
176
+ 'seg.cost': '使った金額(料金が分かるときだけ)',
177
+ 'seg.tools': '道具の呼び出し',
178
+ 'seg.skills': 'このPCで見つかったスキル',
179
+ 'seg.time': '始めてからの時間',
180
+ 'intro.inside': 'このPCから出ません',
181
+ 'intro.outside': 'このPCの外へ出ます',
182
+ 'undo.nothing': '戻すものがありません。',
183
+ 'undo.done': '{turns} ターン戻しました · ファイル {files} 個を元に戻しました。',
184
+ 'undo.alsoTalk': 'メッセージも {n} 件戻しました — 戻したコードがまだあるとモデルが思っていると、その上に積み上げてしまいます。',
185
+ 'undo.repaired': '(宙に浮いた道具呼び出し {n} 件も片づけました)',
186
+ 'undo.saidWas': 'あなたはこう頼んでいました:',
187
+ 'undo.failed': '{n}個は戻せませんでした — そのファイルは直したままです。控えは残してあるので /undo をもう一度試してください。',
188
+ 'undo.talkKept': '会話はそのままです — そのターンはすでに畳まれていました。',
189
+ 'undo.talkKeptWhy': '戻した作業がまだあるとモデルが思っている可能性があるので、次の一言で触れてください。',
190
+ 'bell.stateOn': 'オン',
191
+ 'bell.stateOff': 'オフ',
192
+ 'bell.now': 'ベルは {상태} です。',
193
+ 'bell.when': 'ターンが {초} 秒を超えたときに一度、そして deel があなたの答えを要るときに鳴ります。',
194
+ 'bell.title': 'ウィンドウ題名にも状態が出ます — タブを見るだけで、まだ働いているか分かります。',
195
+ 'bell.howto': '変えるには',
196
+ 'bell.notATty': '(今は端末ではないので、ベルも題名もありません — パイプが壊れます。)',
197
+ 'bell.needOnOff': 'on か off と言ってください。',
198
+ 'bell.turnedOn': 'ベルをオンにしました。',
199
+ 'bell.turnedOff': 'ベルをオフにしました。',
200
+ 'bell.justRang': '今のが一回です。聞こえなければ端末のベル設定を見てください。',
201
+ 'bell.appliesNow': 'この会話にすぐ効きます。',
202
+ 'motion.now': '今:',
203
+ 'motion.plain': '一マスの回転。静かです',
204
+ 'motion.knight': '騎士が剣を振ります。たまに潰れます',
205
+ 'motion.animal': 'ドット絵の動物が歩き回ります',
206
+ 'motion.office': '入力欄の上に十二行のオフィス — 仕事を一部屋として',
207
+ 'motion.off': '何も描きません (スクリーンリーダー向け)',
208
+ 'motion.set': '{것} に変えました。',
209
+ 'motion.appliesNow': '次の描画から見えます。設定にも残しました。',
210
+ 'motion.unknown': '"{값}" はその中にありません。',
211
+ 'motion.pickOne': 'この中から選んでください:',
212
+ 'motion.envWins': 'DEEL_MOTION / DEEL_OFFICE が設定されていて、そちらが優先されます。',
213
+ 'motion.tooSmall': 'この端末は {줄} x {칸} です — オフィスには少なくとも {최소줄} 行 {최소칸} 桁が要ります。',
214
+ 'motion.appleTerminal': 'macOS の Terminal は行間を空けるので部屋に横筋が入ります — Terminal › 設定 › プロファイル › テキスト › フォント「変更」› 行間を 1.0 に。(iTerm2 は既定が 1.0 なので、あちらでは綺麗に出ます)',
215
+ 'lang.now': '画面の言葉は {이름} です。',
216
+ 'lang.ko': '한국어 (韓国語)',
217
+ 'lang.en': 'English (英語)',
218
+ 'lang.ja': '日本語',
219
+ 'lang.zh': '中文 (中国語)',
220
+ 'lang.howto': '変えるには',
221
+ 'lang.changed': '画面の言葉を {이름} にしました。',
222
+ 'lang.unknown': 'ko · en · ja · zh のいずれかを指定してください。',
223
+ 'lang.progress': '{언어}: {전체} 個のうち {옮김} 個が訳されています。残りは英語か韓国語のまま出ます。',
224
+ 'lang.partial': 'まだ全部は訳せていません — 訳していない行は空白ではなく英語か韓国語で出します。',
225
+ 'lang.codeStays': '別に指定しない限り、モデルが読む言葉は画面に合わせます。コード・道具名・引数名はそのままです。',
226
+ 'lang.promptNow': 'モデルへの指示は {이름} です。',
227
+ 'lang.follows': '画面と同じ',
228
+ 'lang.splitHowto': '英語で指示して日本語で受け取るには:',
229
+ 'lang.promptChanged': '指示は {이름}、返答は {답} — 8k のウィンドウで固定分が 23% 減ります。',
230
+ 'lang.envHint': '毎回その言葉で始めるには DEEL_LANG=ja のように設定してください',
231
+ 'cmd.lsp.desc': '言語サーバー — 何が入っていて、Def/Refs が使えるか',
232
+ 'cmd.lsp.arg': '[on|off]',
233
+ 'lsp.found': 'このPCに言語サーバーが {수} 個',
234
+ 'lsp.none': 'このPCに言語サーバーがありません。Grep と Outline に戻ります。',
235
+ 'lsp.thisFolder': 'このフォルダの言語:',
236
+ 'lsp.noneHere': '使えるものなし',
237
+ 'lsp.fileCount': 'ファイル {수} 個',
238
+ 'lsp.tools': '道具:',
239
+ 'lsp.toolsHidden': '隠しています (ここにサーバーがありません)',
240
+ 'lsp.diag': '編集後の診断:',
241
+ 'lsp.stateOn': 'オン',
242
+ 'lsp.stateOff': 'オフ',
243
+ 'lsp.ready': '準備できています',
244
+ 'lsp.starting': '起動中',
245
+ 'lsp.diagOn': '編集後の診断をオンにしました。',
246
+ 'lsp.diagOff': '編集後の診断をオフにしました。Def と Refs はそのまま使えます。',
247
+ 'lsp.installHint': '入れると Def / Refs が出ます:',
248
+ 'lsp.neverInstalls': 'deel は何も入れません。上はあなたが自分で打つコマンドです。',
249
+ 'lsp.howto': '編集後の診断を入り切りする:',
250
+ 'cmd.export.desc': 'この会話を一枚の HTML 報告に — 頼んだこと・変わったこと・確かめたこと',
251
+ 'cmd.export.arg': '[ファイル名]',
252
+ 'export.untitled': '題名のない会話',
253
+ 'export.model': 'モデル',
254
+ 'export.calls': '道具の呼び出し {수} 回',
255
+ 'export.conversation': '訊いたことと答えたこと',
256
+ 'export.you': 'あなた',
257
+ 'export.nothing': '何も言われていません。',
258
+ 'export.changed': '変わったファイル',
259
+ 'export.file': 'ファイル',
260
+ 'export.times': '回数',
261
+ 'export.noChanges': '変わったファイルはありません。',
262
+ 'export.evidence': '実際に走らせたもの',
263
+ 'export.nothingRan': '走らせたコマンドはありません。',
264
+ 'export.unproven': '裏づけなし',
265
+ 'export.allProven': 'ありません — すべての変更に、後から確かめた記録があります。',
266
+ 'export.footer': 'deel が作った報告です。外へのリンクはありません — どのネットワークでも開きます。',
267
+ 'export.saved': '報告を保存しました:',
268
+ 'export.openHint': 'ダブルクリックで開きます。そのままレビューや報告に添えられます。',
269
+ 'export.failed': '報告を保存できませんでした。フォルダの権限を確かめてください。',
270
+ 'help.titleCommon': 'コマンド (よく使うもの)',
271
+ 'help.title': 'コマンド',
272
+ 'help.moreHidden': 'あと {n} 個あります — 打てば同じように動きます。',
273
+ 'help.showAll': '全部見るには',
274
+ 'help.restGoesToModel': 'それ以外はモデルへ行きます。空の行で Ctrl+C を押すと終わります。',
275
+ 'approve.auto.name': '自動承認',
276
+ 'approve.auto.short': '自動',
277
+ 'approve.auto.line': '訊かずに直します。/undo が受け皿です',
278
+ 'approve.confirm.name': '危ないものだけ',
279
+ 'approve.confirm.short': '危険時',
280
+ 'approve.confirm.line': '取り消せないコマンドの前に訊きます。ファイルは訊かずに直します',
281
+ 'approve.strict.name': '毎回訊く',
282
+ 'approve.strict.short': '毎回',
283
+ 'approve.strict.line': 'ファイルを直すたび、コマンドを打つたびに訊きます',
284
+ 'level.beginner.name': 'かんたん',
285
+ 'level.beginner.hint': '勧められた設定のまま始めます',
286
+ 'level.developer.name': '開発者',
287
+ 'level.developer.hint': '全部自分で決めます',
288
+ 'plan.ask': 'この通り進めますか?',
289
+ 'plan.hint': '⏎ 進む · y 一言添えて進む · 3 その段階に一言 · n やめる',
290
+ 'plan.cancelled': 'やめました。計画は上に残っているので、続きから言ってください。',
291
+ 'plan.going': '計画どおり進めます。',
292
+ 'plan.goingWith': '一言を添えて進めます — {말}',
293
+ 'plan.replan': 'その点を踏まえて計画を出し直します。',
294
+ 'plan.replanStep': '{단계}段階についての言葉を踏まえて計画を出し直します。',
295
+ 'ask.title': 'お訊きします',
296
+ 'ask.pickHint': '番号を選んでください。言いたいことがあれば後ろに付けられます (2 ファイルは分けて)',
297
+ 'ask.freeHint': '答えを書いてください',
298
+ 'ask.pickPrompt': '1-{끝}(後ろに一言添えても可)、または自分で書く',
299
+ 'ask.freePrompt': '答え',
300
+ 'ask.stopped': '止めました — 答えなかったものとして進みます。',
301
+ 'loop.backoff': 'サーバーに押し返されました ({무엇}) — {초} 秒後にもう一度 ({n}/{max})',
302
+ 'cost.retries': '再試行',
303
+ // ── 数える言葉 ────────────────────────────────────────────────────────
304
+ 'unit.files': 'ファイル{n}個',
305
+ 'unit.files1': 'ファイル1個',
306
+ 'unit.hits': '{n}件',
307
+ 'unit.hits1': '1件',
308
+ 'unit.lines': '{n}行',
309
+ 'unit.lines1': '1行',
310
+ 'unit.spots': '{n}箇所',
311
+ 'unit.spots1': '1箇所',
312
+ 'unit.places': '{n}箇所',
313
+ 'unit.places1': '1箇所',
314
+ 'unit.count': '{n}個',
315
+ 'unit.count1': '1個',
316
+ 'unit.chars': '{n}文字',
317
+ 'unit.kchars': '{n}k文字',
318
+ 'unit.calls': '{n}回',
319
+ 'unit.sec': '{n}秒',
320
+ 'unit.min': '{n}分',
321
+
322
+ 'sum.done': '完了',
323
+ 'sum.ok': '成功',
324
+ 'sum.exitCode': '終了コード {code}',
325
+ 'sum.killedBy': '{시그널} で終了',
326
+ 'sum.tooMuchOut': '出力が多すぎて途中で打ち切りました',
327
+ 'sum.cantRun': '実行できませんでした ({왜})',
328
+ 'sum.partial': '一部のみ',
329
+ 'sum.cut': '一部省略',
330
+ 'sum.notAllSeen': '全部は見ていない',
331
+ 'sum.filesFailed': '{n}個失敗',
332
+ 'sum.spotsFailed': '{n}箇所失敗',
333
+ 'sum.moved': '{n}個移動',
334
+ 'sum.total': '全体{줄}',
335
+ 'sum.addedLines': '+{줄}',
336
+ 'sum.noVision': 'このモデルは画像を見られません',
337
+ 'sum.emptyAnswer': '空の返答',
338
+ 'sum.unread': '読めず{n}個',
339
+ 'sum.doneOf': '{끝}/{전체} 完了',
340
+ 'sum.justDone': 'たった今{n}個',
341
+ 'sum.noChange': '変更なし',
342
+ 'sum.verified': '確認{n}個',
343
+ 'sum.readAs': '{쓴것} で変換して読み込み',
344
+ 'sum.encGuess': '{인코딩}(推定)',
345
+ 'sum.linesOf': '{준}/{전체}行',
346
+ 'sum.countOf': '{n}/{전체}個',
347
+ 'sum.remembered': '覚えました({n}行)',
348
+ 'sum.rememberFull': '場所が埋まったので古いものを外しました',
349
+ 'sum.recall': '過去の会話 {전체}件中 {맞음}件',
350
+ 'sum.jobStarted': '{n}番で起動',
351
+ 'sum.jobRunning': '実行中',
352
+ 'sum.jobEndedAlready': 'すでに終了',
353
+ 'sum.jobNotStopped': '終わっていません — まだ生きています',
354
+ 'sum.jobStopped': '終了',
355
+
356
+ 'tier.exact': '完全一致',
357
+ 'tier.trail': '行末の空白・改行の違いを無視',
358
+ 'tier.indent': 'インデントの違いを無視',
359
+ 'tier.space': 'すべての空白の違いを無視',
360
+
361
+ 'sum.image': '画像',
362
+ 'sum.imageDropped': '画像 {크기} を省略',
363
+
364
+ 'sum.broken': '不具合{n}件',
365
+ 'sum.unverified': '未確認{n}件',
366
+ 'lsp.noDef': '定義が見つかりません。Grep で探してください。',
367
+ 'lsp.defs': '定義 {n}',
368
+ 'lsp.noRefs': '使っている場所がありません。',
369
+ 'lsp.refs': '使用箇所 {자리} · ファイル {파일}',
370
+
371
+ 'sum.nothingToCheck': '確かめるものがありませんでした',
372
+ 'job.no': '{n}番',
373
+ 'job.stop': '終了',
374
+ 'more.files': 'ほか{n}個',
375
+ 'more.spots': 'ほか{n}箇所',
376
+
377
+ 'err.noSuchFile': 'ファイルがありません: {경로}',
378
+ 'err.alreadyThere': 'すでにあります: {경로}',
379
+ 'err.overwriteHint': '上書きするには overwrite: true を指定してください。',
380
+
381
+ 'run.ctxProbe': 'モデルに設定されたコンテキスト長を確認中…',
382
+ 'run.noStream': 'ストリーミングがないので返答は一度に出ます',
383
+ 'run.hintHelp': '/help コマンド一覧',
384
+ 'run.hintEsc': 'ESC 中断',
385
+ 'run.hintQuit': 'Ctrl+C 中断・終了',
386
+ 'run.stopping': '止めています…',
387
+ 'run.errKept': 'ここまで届いた分は会話に残しました — このまま続けて話せます。',
388
+ 'ev.capped': '答えが {한계} トークンで切れました — /out で上限を上げるか、ファイルは分けて書かせてください',
389
+ 'ev.cutoff': 'サーバーが終わったとも言わずに答えを止めました — 途中で切れた可能性があります',
390
+ 'ev.nudgeMissed': '頼んだこと {n} 件を残したまま終えようとしたので、一度押し戻しました',
391
+ 'ev.nudgeRead': '読むだけで終えようとしたので、一度押し戻しました',
392
+ 'ev.learnedCtx': 'サーバーが教えてくれたコンテキスト上限 {한계} に合わせて呼び直します',
393
+ 'ev.learnedOut': 'サーバーが教えてくれた答えの長さ上限 {한계} に合わせて呼び直します',
394
+ 'ev.reset': '場所が足りず、前の会話 {버린수} 件を消して続けます — 残りのやること {할일} 件',
395
+ 'ev.resetBare': '場所が足りず、前の会話 {버린수} 件を消して続けます',
396
+ 'paste.chip': '貼り付け',
397
+ 'paste.chipLines': '{n}行',
398
+ 'paste.folded': '{표} — たたんでおきました。送るときにそのまま開きます。',
399
+ 'paste.pasted': '{n}行を貼り付けました — Enter で一度に送ります',
400
+ 'run.thinking': '考え中…',
401
+ 'run.thinkingChars': '考え中… {n}文字',
402
+ 'run.turnFoot': '{초}秒 · ツール{n}回 · ↑{입력} ↓{출력}',
403
+ 'run.bye': '終了します。',
404
+ 'run.byeStats': 'モデル呼び出し{n}回 · ツール時間{초}秒 · ↑{입력} ↓{출력}',
405
+ 'run.notMade': '— 作られませんでした',
406
+ 'store.notSaving': 'この会話がファイルに書けていません ({까닭}) — {n}行を失いました。このまま閉じると再開できません。',
407
+
408
+ 'stage.plan': '最初の判断',
409
+ 'stage.work': '続き',
410
+ 'stage.fix': '詰まったとき',
411
+
412
+ 'scr.tools': 'ツール',
413
+ 'scr.conn': '接続',
414
+ 'scr.session': 'このセッション',
415
+ 'status.kind': '規格',
416
+ 'status.url': 'アドレス',
417
+ 'status.proxy': 'プロキシ',
418
+ 'status.proxyOff': '使えません',
419
+ 'status.model': 'モデル',
420
+ 'status.root': '作業フォルダ',
421
+ 'status.shell': 'シェル',
422
+ 'status.keyStore': '鍵の保管',
423
+ 'status.rules': 'ルール',
424
+ 'status.noRules': 'なし(/init で作れます)',
425
+ 'status.rulesUnread': '{이름} はありますが読めませんでした({까닭})— このフォルダのルールは効いていません',
426
+ 'status.caps': '対応',
427
+ 'status.capTools': 'ツール',
428
+ 'status.capStream': 'ストリーム',
429
+ 'status.capSchema': 'スキーマ',
430
+ 'status.capThink': '推論',
431
+ 'cost.calls': 'モデル呼び出し',
432
+ 'cost.tokIn': '入力トークン',
433
+ 'cost.tokOut': '出力トークン',
434
+ 'cost.toolMs': 'ツール時間',
435
+ 'cost.elapsed': '経過',
436
+ 'cost.money': '料金',
437
+ // ── キャッシュ・配線カード・自動強度 ──────────────────────────────────
438
+ 'status.wire': '配線',
439
+ 'wire.think': '思考',
440
+ 'run.refusal': 'モデルがこの依頼を断りました — 押し直さずにここで止めます',
441
+ 'run.refusalWhy': '理由 {}',
442
+ 'wire.rungs': '目盛り',
443
+ 'wire.cache': 'キャッシュ',
444
+ 'wire.none': 'なし',
445
+ 'wire.cacheMarked': '印付け',
446
+ 'wire.cacheKey': 'キー',
447
+ 'wire.cacheAuto': 'サーバー任せ',
448
+ 'cost.cache': 'キャッシュ',
449
+ 'cost.think': '思考',
450
+ 'cost.thinkLine': '{토큰} トークン · 応答の {}%',
451
+ 'cost.cacheLine': '読み {읽음} · 書き {씀} · 命中 {몫}%',
452
+ 'cost.cacheColdWarn': '書き込みだけで読み込みがありません — 毎回先頭から組み直しています',
453
+ 'think.auto': '自動',
454
+ 'think.autoNote': '設定値は上限です ({천장}) 軽い依頼は {지금} まで下げます',
455
+ 'think.autoOn': '依頼の内容に合わせて強度を選びます設定値が上限になります',
456
+ 'think.autoOff': '設定した強度をそのまま使います',
457
+ 'think.wire': '配線',
458
+ 'think.wireSends': '実際に送る値 {}',
459
+ 'think.wireNoOff': 'この窓口は切る値を教えてくれませんでした項目を送らないので、サーバー既定値で動きます',
460
+ 'loop.wire': 'サーバーが受け取らない項目があるため、直して呼び直します ({무엇})',
461
+ 'loop.quotaAhead': '残量が尽きたので {초} 秒待ってから送ります',
462
+ 'cost.quota': 'サーバー残量',
463
+ 'cost.quotaAge': '{초}秒前の応答基準',
464
+
465
+ 'scr.context': 'コンテキスト',
466
+ 'unit.tokens': '{n} トークン',
467
+ 'ctx.system': 'システムプロンプト',
468
+ 'ctx.rules': 'ルール ({이름})',
469
+ 'ctx.rulesNone': 'ルール (なし)',
470
+ 'ctx.memory': '記憶 ({n}行)',
471
+ 'ctx.learned': 'ここで分かったこと',
472
+ 'ctx.skills': 'スキル一覧 ({실림}/{전체})',
473
+ 'ctx.tools': '道具の定義',
474
+ 'ctx.history': '会話の履歴',
475
+ 'ctx.toolResults': '道具の結果 (ファイル{n}個)',
476
+ 'ctx.left': '残り',
477
+ 'ctx.compactHint': '会話を畳む',
478
+ 'ctx.clearHint': 'まるごと消す',
479
+ 'ctx.calibrated': 'サーバーの実測値に合わせて {부호}{퍼센트}% 補正しました ({번}回計測)。',
480
+ 'ctx.estimate': '数字は推定です — 正確なトークナイザーは使っていません。',
481
+
482
+ 'auth.waiting': '社内ログインを待っています…',
483
+ 'auth.got': '鍵を受け取りました — 約{분}分使えます',
484
+ 'auth.failed': '鍵を受け取れませんでした — {왜}',
485
+ 'auth.from': '取得',
486
+ 'auth.fromPolicy': '取得(管理ポリシー)',
487
+ 'auth.leftMin': '残り{분}分',
488
+ 'auth.notYet': 'まだ取得していません',
489
+
490
+ 'undo.wayRestored': '戻しました',
491
+ 'undo.wayDeleted': '削除(元々なかったファイル)',
492
+
493
+ 'common.unknownCommand': '知らないコマンド',
494
+ 'common.seeHelp': '/help で一覧が出ます',
495
+ 'common.yes': 'はい',
496
+ 'common.no': 'いいえ',
497
+ 'common.cfgSaveFailed': '設定をファイルに保存できませんでした({왜})— 今回は効きますが、開き直すと元に戻ります。',
498
+ };