deel-local-cli 1.7.0 → 1.10.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.
- package/README.ko.md +1166 -0
- package/README.md +1223 -1107
- package/bin/deel.js +78 -12
- package/package.json +4 -4
- package/src/acp/map.js +1 -1
- package/src/acp/serve.js +40 -3
- package/src/agent/compact.js +314 -296
- package/src/agent/effort.js +27 -7
- package/src/agent/evidence.js +2 -0
- package/src/agent/filemem.js +141 -0
- package/src/agent/grade.js +51 -1
- package/src/agent/loop.js +218 -40
- package/src/agent/session.js +136 -14
- package/src/agent/store.js +186 -9
- package/src/agent/threads.js +26 -1
- package/src/backend/adapter.js +272 -23
- package/src/backend/learn.js +24 -0
- package/src/backend/mcp.js +96 -5
- package/src/backend/probe.js +131 -61
- package/src/backend/quota.js +29 -5
- package/src/backend/retry.js +3 -0
- package/src/backend/scanui.js +1 -1
- package/src/backend/toolfit.js +325 -0
- package/src/commands.js +170 -61
- package/src/completion.js +20 -2
- package/src/config.js +47 -2
- package/src/i18n/en.js +210 -3
- package/src/i18n/index.js +40 -0
- package/src/i18n/ja.js +204 -3
- package/src/i18n/ko.js +270 -3
- package/src/i18n/zh.js +204 -3
- package/src/lsp/client.js +49 -5
- package/src/oneshot.js +92 -5
- package/src/pack/sbom.js +30 -4
- package/src/pack/selfpack.js +26 -10
- package/src/pack/sheet.en.js +288 -0
- package/src/pack/tar.js +65 -2
- package/src/plugins/manage.js +46 -9
- package/src/repl.js +344 -61
- package/src/reset.js +397 -0
- package/src/safety/audit.js +95 -8
- package/src/safety/authcmd.js +316 -0
- package/src/safety/guard.js +143 -0
- package/src/safety/keystore.js +114 -38
- package/src/safety/undo.js +25 -6
- package/src/tools/desc.en.js +19 -14
- package/src/tools/index.js +349 -75
- package/src/tools/jobs.js +175 -42
- package/src/tools/lsp.js +5 -4
- package/src/tools/outline.js +7 -3
- package/src/tools/task.js +10 -6
- package/src/tools/todo.js +9 -2
- package/src/tools/verify.js +42 -7
- package/src/tools/webfetch.js +94 -10
- package/src/ui/export.js +1 -1
- package/src/ui/md.js +201 -5
- package/src/ui/motion.js +0 -1
- package/src/ui/pastechip.js +50 -3
- package/src/ui/pick.js +115 -0
- package/src/ui/screen.js +23 -3
- package/README.en.md +0 -1117
package/src/i18n/en.js
CHANGED
|
@@ -38,6 +38,28 @@ export const en = {
|
|
|
38
38
|
'cmd.model.arg': '[name|list|models|card]',
|
|
39
39
|
'cmd.think.desc': 'reasoning effort (off/low/medium/high/max)',
|
|
40
40
|
'cmd.think.arg': '<level>',
|
|
41
|
+
|
|
42
|
+
// ── /think screen ──────────────────────────────────────────────────
|
|
43
|
+
'run.noTools': 'Tool calling is unconfirmed — check with deel diagnose',
|
|
44
|
+
'think.effort': 'Effort',
|
|
45
|
+
'think.profile': 'Profile',
|
|
46
|
+
'think.detail': 'detail',
|
|
47
|
+
'think.harder': 'harder',
|
|
48
|
+
'think.faster': 'faster',
|
|
49
|
+
'think.eg': 'e.g.',
|
|
50
|
+
'think.col.stage': 'Stage',
|
|
51
|
+
'think.col.level': 'Effort',
|
|
52
|
+
'think.col.cap': 'Out cap',
|
|
53
|
+
'think.col.when': 'When',
|
|
54
|
+
'think.cap.head': 'Caps are shared inside',
|
|
55
|
+
'think.cap.tail': ' —',
|
|
56
|
+
'think.cap.you': '(you set this)',
|
|
57
|
+
'think.cap.server': '(read from the server)',
|
|
58
|
+
'think.cap.guess': '(unknown, so a default)',
|
|
59
|
+
'think.ctx': 'Context',
|
|
60
|
+
'think.ctx.used': ' · used ',
|
|
61
|
+
'think.nomodel': 'This connection does not apply effort at the model layer.',
|
|
62
|
+
'think.nomodel.note': 'Only the per-stage output cap applies.',
|
|
41
63
|
'cmd.mode.desc': 'approval policy — how much it asks first (auto/confirm/strict)',
|
|
42
64
|
'cmd.mode.arg': '<mode>',
|
|
43
65
|
'cmd.work.desc': 'work mode — what kind of job this is (picked for you in auto)',
|
|
@@ -111,8 +133,10 @@ export const en = {
|
|
|
111
133
|
'consult.failed': 'Could not ask — {왜}',
|
|
112
134
|
'consult.empty': 'The reply came back empty. That model may not answer without tools.',
|
|
113
135
|
'consult.added': 'Added that answer to the conversation, labelled with who said it.',
|
|
136
|
+
// ── Connection check ──────────────────────────────────────────────────
|
|
137
|
+
'probe.codexOnly': 'The {모델} family is not served through this endpoint (/chat/completions) — OpenAI serves it only through the Responses API (/responses), which deel cannot speak yet. Pick a different model for now.',
|
|
114
138
|
// ── Startup header ────────────────────────────────────────────────────
|
|
115
|
-
'head.spec.ollama': '
|
|
139
|
+
'head.spec.ollama': "Ollama's own API",
|
|
116
140
|
'head.spec.openai': 'OpenAI-compatible API',
|
|
117
141
|
'head.spec.anthropic': 'Anthropic API',
|
|
118
142
|
'head.mode.default': 'inside (default)',
|
|
@@ -183,6 +207,7 @@ export const en = {
|
|
|
183
207
|
'undo.alsoTalk': 'Rolled back {n} message(s) too — if the model still thinks the reverted code is there, it keeps building on it.',
|
|
184
208
|
'undo.repaired': '({n} orphaned tool call(s) cleaned up as well)',
|
|
185
209
|
'undo.saidWas': 'You had asked:',
|
|
210
|
+
'undo.failed': '{n} file(s) could not be restored — they are still modified. The snapshots were kept, so try /undo again.',
|
|
186
211
|
'undo.talkKept': 'The conversation is left as is — that turn had already been folded away.',
|
|
187
212
|
'undo.talkKeptWhy': 'The model may still think the reverted work exists, so mention it in your next message.',
|
|
188
213
|
|
|
@@ -295,19 +320,201 @@ export const en = {
|
|
|
295
320
|
'level.developer.hint': 'everything by hand',
|
|
296
321
|
|
|
297
322
|
// ── Ask box (the Ask tool) ────────────────────────────────────────────
|
|
323
|
+
'plan.ask': 'Go ahead with this?',
|
|
324
|
+
'plan.hint': '⏎ go · y with a note · 3 a note on that step · n cancel',
|
|
325
|
+
'plan.cancelled': 'Stopped. The plan is still above — just say what you want next.',
|
|
326
|
+
'plan.going': 'Going ahead with the plan.',
|
|
327
|
+
'plan.goingWith': 'Going ahead, with your note — {말}',
|
|
328
|
+
'plan.replan': 'Redoing the plan with that in mind.',
|
|
329
|
+
'plan.replanStep': 'Redoing the plan with your note on step {단계}.',
|
|
298
330
|
'ask.title': 'A question for you',
|
|
299
|
-
'ask.pickHint': 'Pick a number
|
|
331
|
+
'ask.pickHint': 'Pick a number. Add a note after it if you have one (2 split the files)',
|
|
300
332
|
'ask.freeHint': 'Type your answer',
|
|
301
|
-
'ask.pickPrompt': '1-{끝}, or type your own',
|
|
333
|
+
'ask.pickPrompt': '1-{끝} (a note may follow), or type your own',
|
|
302
334
|
'ask.freePrompt': 'Answer',
|
|
335
|
+
'ask.stopped': 'Stopped — treating it as unanswered.',
|
|
303
336
|
|
|
304
337
|
// ── When the server pushes back (backend/retry.js) ────────────────────
|
|
305
338
|
'loop.backoff': 'The server pushed back ({무엇}) — calling again in {초}s ({n}/{max})',
|
|
306
339
|
'cost.retries': 'retries',
|
|
307
340
|
|
|
341
|
+
// ── Counted things ────────────────────────────────────────────────────
|
|
342
|
+
// Singular keys exist because English needs them; Korean reuses one word.
|
|
343
|
+
'unit.files': '{n} files',
|
|
344
|
+
'unit.files1': '1 file',
|
|
345
|
+
'unit.hits': '{n} hits',
|
|
346
|
+
'unit.hits1': '1 hit',
|
|
347
|
+
'unit.lines': '{n} lines',
|
|
348
|
+
'unit.lines1': '1 line',
|
|
349
|
+
'unit.spots': '{n} spots',
|
|
350
|
+
'unit.spots1': '1 spot',
|
|
351
|
+
'unit.places': '{n} places',
|
|
352
|
+
'unit.places1': '1 place',
|
|
353
|
+
'unit.count': '{n}',
|
|
354
|
+
'unit.count1': '1',
|
|
355
|
+
'unit.chars': '{n} chars',
|
|
356
|
+
'unit.kchars': '{n}k chars',
|
|
357
|
+
'unit.calls': '{n} calls',
|
|
358
|
+
'unit.sec': '{n}s',
|
|
359
|
+
'unit.min': '{n} min',
|
|
360
|
+
|
|
361
|
+
// ── Tool result line ──────────────────────────────────────────────────
|
|
362
|
+
'sum.done': 'done',
|
|
363
|
+
'sum.ok': 'ok',
|
|
364
|
+
'sum.exitCode': 'exit {code}',
|
|
365
|
+
'sum.killedBy': 'killed by {시그널}',
|
|
366
|
+
'sum.tooMuchOut': 'output too large — capture cut short',
|
|
367
|
+
'sum.cantRun': 'could not run ({왜})',
|
|
368
|
+
'sum.partial': 'partial',
|
|
369
|
+
'sum.cut': 'truncated',
|
|
370
|
+
'sum.notAllSeen': 'not all scanned',
|
|
371
|
+
'sum.filesFailed': '{n} failed',
|
|
372
|
+
'sum.spotsFailed': '{n} spots failed',
|
|
373
|
+
'sum.moved': '{n} moved',
|
|
374
|
+
'sum.total': '{줄} total',
|
|
375
|
+
'sum.addedLines': '+{줄}',
|
|
376
|
+
'sum.noVision': 'this model cannot see images',
|
|
377
|
+
'sum.emptyAnswer': 'empty answer',
|
|
378
|
+
'sum.unread': '{n} unreadable',
|
|
379
|
+
'sum.doneOf': '{끝}/{전체} done',
|
|
380
|
+
'sum.justDone': '{n} just now',
|
|
381
|
+
'sum.noChange': 'unchanged',
|
|
382
|
+
'sum.verified': '{n} checked',
|
|
383
|
+
'sum.readAs': 'read via {쓴것}',
|
|
384
|
+
'sum.encGuess': '{인코딩} (guessed)',
|
|
385
|
+
'sum.linesOf': '{준}/{전체} lines',
|
|
386
|
+
'sum.countOf': '{n}/{전체}',
|
|
387
|
+
'sum.remembered': 'remembered ({n} lines)',
|
|
388
|
+
'sum.rememberFull': 'dropped the oldest to make room',
|
|
389
|
+
'sum.recall': '{맞음} of {전체} from past sessions',
|
|
390
|
+
'sum.jobStarted': 'started as job {n}',
|
|
391
|
+
'sum.jobRunning': 'running',
|
|
392
|
+
'sum.jobEndedAlready': 'already finished',
|
|
393
|
+
'sum.jobNotStopped': 'still running — could not stop it',
|
|
394
|
+
'sum.jobStopped': 'stopped',
|
|
395
|
+
|
|
396
|
+
'tier.exact': 'exact match',
|
|
397
|
+
'tier.trail': 'ignoring trailing spaces and line endings',
|
|
398
|
+
'tier.indent': 'ignoring indentation',
|
|
399
|
+
'tier.space': 'ignoring all whitespace',
|
|
400
|
+
|
|
401
|
+
'sum.image': 'image',
|
|
402
|
+
'sum.imageDropped': 'dropped {크기} of images',
|
|
403
|
+
|
|
404
|
+
'sum.broken': '{n} broken',
|
|
405
|
+
'sum.unverified': '{n} unchecked',
|
|
406
|
+
'lsp.noDef': 'no definition found. Try Grep.',
|
|
407
|
+
'lsp.defs': 'defined in {n}',
|
|
408
|
+
'lsp.noRefs': 'not used anywhere.',
|
|
409
|
+
'lsp.refs': 'used in {자리} across {파일}',
|
|
410
|
+
|
|
411
|
+
'sum.nothingToCheck': 'nothing to check',
|
|
412
|
+
'job.no': 'job {n}',
|
|
413
|
+
'job.stop': 'stop',
|
|
414
|
+
'more.files': 'and {n} more',
|
|
415
|
+
'more.spots': 'and {n} more spots',
|
|
416
|
+
|
|
417
|
+
// ── Tool errors ───────────────────────────────────────────────────────
|
|
418
|
+
'err.noSuchFile': 'No such file: {경로}',
|
|
419
|
+
'err.alreadyThere': 'Already there: {경로}',
|
|
420
|
+
'err.overwriteHint': 'Pass overwrite: true to replace it.',
|
|
421
|
+
|
|
422
|
+
// ── Chat screen ───────────────────────────────────────────────────────
|
|
423
|
+
'run.ctxProbe': 'Checking the context length this model was started with…',
|
|
424
|
+
'run.noStream': 'No streaming — the answer arrives all at once',
|
|
425
|
+
'run.hintHelp': '/help commands',
|
|
426
|
+
'run.hintEsc': 'ESC stop',
|
|
427
|
+
'run.hintQuit': 'Ctrl+C stop / quit',
|
|
428
|
+
'run.stopping': 'stopping…',
|
|
429
|
+
'run.errKept': 'What arrived before the failure was kept in the conversation — you can carry on from there.',
|
|
430
|
+
'ev.capped': 'The answer was cut off at {한계} tokens — raise the cap with /out, or have files written in parts',
|
|
431
|
+
'ev.cutoff': 'The server stopped the answer without saying it had finished — it may have been cut mid-way',
|
|
432
|
+
'ev.nudgeMissed': 'It was about to finish leaving {n} of the things you asked for undone — pushed back once',
|
|
433
|
+
'ev.nudgeRead': 'It was about to finish having only read things — pushed back once',
|
|
434
|
+
'ev.learnedCtx': 'Setting the context limit to {한계} as the server reported, and calling again',
|
|
435
|
+
'ev.learnedOut': 'Setting the answer-length limit to {한계} as the server reported, and calling again',
|
|
436
|
+
'ev.reset': 'Out of room — cleared {버린수} earlier messages and carrying on, {할일} to-do items left',
|
|
437
|
+
'ev.resetBare': 'Out of room — cleared {버린수} earlier messages and carrying on',
|
|
438
|
+
'paste.chip': 'pasted',
|
|
439
|
+
'paste.chipLines': '{n} lines',
|
|
440
|
+
'paste.folded': '{표} — folded away. It expands back verbatim when sent.',
|
|
441
|
+
'paste.pasted': 'Pasted {n} lines — Enter sends them all at once',
|
|
442
|
+
'run.thinking': 'thinking…',
|
|
443
|
+
'run.thinkingChars': 'thinking… {n} chars',
|
|
444
|
+
'run.turnFoot': '{초}s · {n} tool calls · ↑{입력} ↓{출력}',
|
|
445
|
+
'run.bye': 'Bye.',
|
|
446
|
+
'run.byeStats': '{n} model calls · {초}s in tools · ↑{입력} ↓{출력}',
|
|
447
|
+
'run.notMade': '— was not created',
|
|
448
|
+
'store.notSaving': 'This conversation is not being written to disk ({까닭}) — {n} lines lost. Close this window and you cannot resume it.',
|
|
449
|
+
|
|
450
|
+
'stage.plan': 'deciding',
|
|
451
|
+
'stage.work': 'continuing',
|
|
452
|
+
'stage.fix': 'stuck',
|
|
453
|
+
|
|
454
|
+
// ── /tools · /status · /cost ──────────────────────────────────────────
|
|
455
|
+
'scr.tools': 'Tools',
|
|
456
|
+
'scr.conn': 'Connection',
|
|
457
|
+
'scr.session': 'This session',
|
|
458
|
+
'status.kind': 'API',
|
|
459
|
+
'status.url': 'URL',
|
|
460
|
+
'status.proxy': 'Proxy',
|
|
461
|
+
'status.proxyOff': 'unusable',
|
|
462
|
+
'status.model': 'Model',
|
|
463
|
+
'status.root': 'Work folder',
|
|
464
|
+
'status.shell': 'Shell',
|
|
465
|
+
'status.keyStore': 'Key store',
|
|
466
|
+
'status.rules': 'Rules',
|
|
467
|
+
'status.noRules': 'none (/init creates one)',
|
|
468
|
+
'status.rulesUnread': '{이름} exists but could not be read ({까닭}) — this folder\'s rules are not in effect',
|
|
469
|
+
'status.caps': 'Supports',
|
|
470
|
+
'status.capTools': 'tools',
|
|
471
|
+
'status.capStream': 'stream',
|
|
472
|
+
'status.capSchema': 'schema',
|
|
473
|
+
'status.capThink': 'reasoning',
|
|
474
|
+
'cost.calls': 'Model calls',
|
|
475
|
+
'cost.tokIn': 'Input tokens',
|
|
476
|
+
'cost.tokOut': 'Output tokens',
|
|
477
|
+
'cost.toolMs': 'Time in tools',
|
|
478
|
+
'cost.elapsed': 'Elapsed',
|
|
479
|
+
'cost.money': 'Cost',
|
|
480
|
+
'cost.quota': 'Server quota',
|
|
481
|
+
'cost.quotaAge': 'as of {초}s ago',
|
|
482
|
+
|
|
483
|
+
// ── /context table ────────────────────────────────────────────────────
|
|
484
|
+
'scr.context': 'Context',
|
|
485
|
+
'unit.tokens': '{n} tokens',
|
|
486
|
+
'ctx.system': 'System prompt',
|
|
487
|
+
'ctx.rules': 'Rules ({이름})',
|
|
488
|
+
'ctx.rulesNone': 'Rules (none)',
|
|
489
|
+
'ctx.memory': 'Memory ({n} lines)',
|
|
490
|
+
'ctx.learned': 'What it has learned here',
|
|
491
|
+
'ctx.skills': 'Skill list ({실림}/{전체})',
|
|
492
|
+
'ctx.tools': 'Tool definitions',
|
|
493
|
+
'ctx.history': 'Conversation',
|
|
494
|
+
'ctx.toolResults': 'Tool results ({n} files)',
|
|
495
|
+
'ctx.left': 'Left',
|
|
496
|
+
'ctx.compactHint': 'shrink the conversation',
|
|
497
|
+
'ctx.clearHint': 'clear it all',
|
|
498
|
+
'ctx.calibrated': 'Adjusted by {부호}{퍼센트}% against what the server reported ({번} samples).',
|
|
499
|
+
'ctx.estimate': 'These are estimates — no exact tokenizer is used.',
|
|
500
|
+
|
|
501
|
+
// ── Fetching the key (safety/authcmd.js) ──────────────────────────────
|
|
502
|
+
'auth.waiting': 'waiting for your corporate login…',
|
|
503
|
+
'auth.got': 'Got a key — good for about {분} min',
|
|
504
|
+
'auth.failed': 'Could not get a key — {왜}',
|
|
505
|
+
'auth.from': 'fetched',
|
|
506
|
+
'auth.fromPolicy': 'fetched (admin policy)',
|
|
507
|
+
'auth.leftMin': '{분} min left',
|
|
508
|
+
'auth.notYet': 'not fetched yet',
|
|
509
|
+
|
|
510
|
+
// ── Undo result lines ─────────────────────────────────────────────────
|
|
511
|
+
'undo.wayRestored': 'restored',
|
|
512
|
+
'undo.wayDeleted': 'deleted (did not exist before)',
|
|
513
|
+
|
|
308
514
|
// ── Common ────────────────────────────────────────────────────────────
|
|
309
515
|
'common.unknownCommand': 'Unknown command',
|
|
310
516
|
'common.seeHelp': 'Run /help for the list',
|
|
311
517
|
'common.yes': 'yes',
|
|
312
518
|
'common.no': 'no',
|
|
519
|
+
'common.cfgSaveFailed': 'Could not write the setting to disk ({왜}) — it applies now but reverts on restart.',
|
|
313
520
|
};
|
package/src/i18n/index.js
CHANGED
|
@@ -201,6 +201,46 @@ export function 말(열쇠, 채움 = null) {
|
|
|
201
201
|
});
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
+
/**
|
|
205
|
+
* 이 열쇠의 **모든 말**. 겹치는 것은 한 번만.
|
|
206
|
+
*
|
|
207
|
+
* 화면에 찍은 뒤 그 글자를 **다시 알아봐야 하는** 자리에만 쓴다.
|
|
208
|
+
* 붙여넣기 표가 그렇다 — `[붙여넣기 #1 · 40줄 · 2.1KB]` 를 찍어 놓고,
|
|
209
|
+
* 보낼 때 그 표를 도로 찾아 원문으로 편다. 지금 말로만 찾으면 `/lang en`
|
|
210
|
+
* 한 번에 앞서 찍어 둔 표를 못 알아본다 — 사람이 붙인 40줄이 표 글자
|
|
211
|
+
* 그대로 모델에게 가고, 그게 조용히 벌어진다.
|
|
212
|
+
*/
|
|
213
|
+
export function 말모두(열쇠) {
|
|
214
|
+
const k = String(열쇠 ?? '');
|
|
215
|
+
const 본것 = [];
|
|
216
|
+
for (const L of 언어들) {
|
|
217
|
+
const v = 표[L]?.[k];
|
|
218
|
+
if (v !== undefined && !본것.includes(v)) 본것.push(v);
|
|
219
|
+
}
|
|
220
|
+
return 본것.length ? 본것 : [k];
|
|
221
|
+
}
|
|
222
|
+
/*
|
|
223
|
+
* 세는 말 한 조각 — `3개 파일` · `1건` · `12줄`.
|
|
224
|
+
*
|
|
225
|
+
* 도구 결과 한 줄은 이 조각들을 ` · ` 로 이어 만든다. 왜 통짜 문장으로
|
|
226
|
+
* 안 두는지는 ko.js 의 '세는 말' 묶음에 적어 두었다.
|
|
227
|
+
*
|
|
228
|
+
* **하나일 때 열쇠가 갈린다.** 한국어는 「1개 파일」 로 끝이지만 영어는
|
|
229
|
+
* `1 files` 가 나오면 그 줄 전체가 대충 만든 것으로 읽힌다. 그래서 홑을
|
|
230
|
+
* 따로 두는 갈래만 모아 뒀다 — 여기 없는 갈래(자·회·초)는 영어에서도
|
|
231
|
+
* 홑복수가 안 갈려서 열쇠를 늘릴 까닭이 없다.
|
|
232
|
+
*
|
|
233
|
+
* 숫자는 여기서 toLocaleString() 을 거친다. 부르는 쪽마다 하면 어디선가
|
|
234
|
+
* 빠져서 `50700` 과 `50,700` 이 한 화면에 같이 뜬다.
|
|
235
|
+
*/
|
|
236
|
+
const 홑이따로인것 = new Set(['files', 'hits', 'lines', 'spots', 'places', 'count', 'turns']);
|
|
237
|
+
|
|
238
|
+
export function 세말(갈래, n) {
|
|
239
|
+
const 수 = Number(n);
|
|
240
|
+
const 홑 = 홑이따로인것.has(갈래) && 수 === 1;
|
|
241
|
+
return 말(`unit.${갈래}${홑 ? '1' : ''}`, { n: Number.isFinite(수) ? 수.toLocaleString() : String(n) });
|
|
242
|
+
}
|
|
243
|
+
|
|
204
244
|
/** 이 열쇠가 지금 언어로 옮겨져 있나. 검사와 /lang 이 본다. */
|
|
205
245
|
export function 옮겨졌나(열쇠, 언어이름 = 지금) {
|
|
206
246
|
return Object.prototype.hasOwnProperty.call(표[언어이름] ?? {}, String(열쇠));
|
package/src/i18n/ja.js
CHANGED
|
@@ -22,6 +22,31 @@ export const ja = {
|
|
|
22
22
|
'cmd.model.arg': '[名前|list|models|card]',
|
|
23
23
|
'cmd.think.desc': '思考の量 (off/low/medium/high/max)',
|
|
24
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
|
+
|
|
25
50
|
'cmd.mode.desc': '承認の方針 — どこまで先に訊くか (auto/confirm/strict)',
|
|
26
51
|
'cmd.mode.arg': '<モード>',
|
|
27
52
|
'cmd.work.desc': '作業モード — どんな仕事か (auto では自動で選ばれる)',
|
|
@@ -94,7 +119,8 @@ export const ja = {
|
|
|
94
119
|
'consult.failed': '訊けませんでした — {왜}',
|
|
95
120
|
'consult.empty': '返答が空でした。そのモデルは道具なしでは答えないのかもしれません。',
|
|
96
121
|
'consult.added': 'その答えを、誰が言ったか付けて会話に足しました。',
|
|
97
|
-
'
|
|
122
|
+
'probe.codexOnly': '{모델} 系列はこの窓口(/chat/completions)では出てきません — OpenAI が Responses API(/responses)でのみ提供しているモデルで、deel はまだその窓口を使えません。今は別のモデルを選んでください。',
|
|
123
|
+
'head.spec.ollama': 'Ollama 独自規格',
|
|
98
124
|
'head.spec.openai': 'OpenAI 互換 API',
|
|
99
125
|
'head.spec.anthropic': 'Anthropic API',
|
|
100
126
|
'head.mode.default': 'この中(既定)',
|
|
@@ -158,6 +184,7 @@ export const ja = {
|
|
|
158
184
|
'undo.alsoTalk': 'メッセージも {n} 件戻しました — 戻したコードがまだあるとモデルが思っていると、その上に積み上げてしまいます。',
|
|
159
185
|
'undo.repaired': '(宙に浮いた道具呼び出し {n} 件も片づけました)',
|
|
160
186
|
'undo.saidWas': 'あなたはこう頼んでいました:',
|
|
187
|
+
'undo.failed': '{n}個は戻せませんでした — そのファイルは直したままです。控えは残してあるので /undo をもう一度試してください。',
|
|
161
188
|
'undo.talkKept': '会話はそのままです — そのターンはすでに畳まれていました。',
|
|
162
189
|
'undo.talkKeptWhy': '戻した作業がまだあるとモデルが思っている可能性があるので、次の一言で触れてください。',
|
|
163
190
|
'bell.stateOn': 'オン',
|
|
@@ -258,15 +285,189 @@ export const ja = {
|
|
|
258
285
|
'level.beginner.hint': '勧められた設定のまま始めます',
|
|
259
286
|
'level.developer.name': '開発者',
|
|
260
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': '{단계}段階についての言葉を踏まえて計画を出し直します。',
|
|
261
295
|
'ask.title': 'お訊きします',
|
|
262
|
-
'ask.pickHint': '
|
|
296
|
+
'ask.pickHint': '番号を選んでください。言いたいことがあれば後ろに付けられます (2 ファイルは分けて)',
|
|
263
297
|
'ask.freeHint': '答えを書いてください',
|
|
264
|
-
'ask.pickPrompt': '1-{끝}
|
|
298
|
+
'ask.pickPrompt': '1-{끝}(後ろに一言添えても可)、または自分で書く',
|
|
265
299
|
'ask.freePrompt': '答え',
|
|
300
|
+
'ask.stopped': '止めました — 答えなかったものとして進みます。',
|
|
266
301
|
'loop.backoff': 'サーバーに押し返されました ({무엇}) — {초} 秒後にもう一度 ({n}/{max})',
|
|
267
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
|
+
|
|
268
468
|
'common.unknownCommand': '知らないコマンド',
|
|
269
469
|
'common.seeHelp': '/help で一覧が出ます',
|
|
270
470
|
'common.yes': 'はい',
|
|
271
471
|
'common.no': 'いいえ',
|
|
472
|
+
'common.cfgSaveFailed': '設定をファイルに保存できませんでした({왜})— 今回は効きますが、開き直すと元に戻ります。',
|
|
272
473
|
};
|