deel-local-cli 2.1.1 → 2.1.3
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 +6 -4
- package/README.md +6 -4
- package/bin/deel.js +64 -43
- package/package.json +1 -1
- package/src/acp/serve.js +89 -3
- package/src/agent/donecheck.js +19 -4
- package/src/agent/loop.js +44 -4
- package/src/agent/route.js +67 -1
- package/src/agent/session.js +35 -6
- package/src/backend/adapter.js +26 -4
- package/src/backend/http.js +2 -23
- package/src/backend/loosejson.js +109 -0
- package/src/backend/mcp.js +601 -41
- package/src/backend/probe.js +17 -3
- package/src/backend/textcalls.js +196 -0
- package/src/commands.js +26 -37
- package/src/completion.js +3 -0
- package/src/eval/run.js +73 -14
- package/src/exit.js +118 -0
- package/src/i18n/en.js +8 -1
- package/src/i18n/ja.js +8 -1
- package/src/i18n/ko.js +8 -1
- package/src/i18n/zh.js +8 -1
- package/src/lsp/diag.js +2 -1
- package/src/oneshot.js +163 -93
- package/src/repl.js +14 -2
- package/src/runlog.js +99 -0
- package/src/safety/authcmd.js +68 -17
- package/src/safety/gitsnap.js +286 -0
- package/src/safety/undo.js +107 -8
- package/src/safety/which.js +37 -0
- package/src/setup.js +3 -5
- package/src/slash.js +103 -0
- package/src/tools/importgraph.js +107 -0
- package/src/tools/index.js +24 -1
- package/src/tools/outline.js +21 -3
- package/src/tools/verify.js +103 -45
- package/src/ui/banner.js +8 -1
package/src/exit.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// 종료코드와 시작도 못 한 실패 한 덩이 — `deel run` 과 진입점(bin/deel.js)이 같이 쓴다.
|
|
2
|
+
//
|
|
3
|
+
// oneshot.js 에서 떼어 냈다 (2.1.2). 진입점이 이 표 하나 때문에 oneshot.js 를 불러오면 대화 화면·도구·
|
|
4
|
+
// 게이트웨이까지 딸려 와서, `deel --version` 한 줄이 파일 164개를 읽었다. oneshot.js 는 그대로 내보낸다.
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 종료코드.
|
|
8
|
+
*
|
|
9
|
+
* 스크립트는 화면 글이 아니라 이 숫자만 본다. 그래서 '끝났다' 와 '끝난 척했다'
|
|
10
|
+
* 를 반드시 갈라 놔야 한다 — 걸음 수 상한에 걸려 멈춘 것을 0 으로 돌려주면
|
|
11
|
+
* 야간 배치가 아무 일도 안 하고 초록불을 켠다. 그게 제일 나쁜 결말이다.
|
|
12
|
+
*/
|
|
13
|
+
export const EXIT = {
|
|
14
|
+
done: 0, // 끝까지 답했다
|
|
15
|
+
error: 1, // 오류로 끝났다 (연결 없음 · 시킬 말 없음 · 모델 오류)
|
|
16
|
+
limit: 2, // 도구 호출 걸음 수 상한에 닿았다
|
|
17
|
+
stuck: 3, // 같은 자리에서 헛돌아 스스로 멈췄다
|
|
18
|
+
aborted: 4, // 도중에 끊겼다 (Ctrl+C)
|
|
19
|
+
/*
|
|
20
|
+
* 서버가 끝났다는 말을 한 번도 안 주고 답을 멈췄다.
|
|
21
|
+
*
|
|
22
|
+
* 여기에 자기 코드가 있어야 한다. 전에는 이걸 아예 안 보고 `done`(0) 으로
|
|
23
|
+
* 끝냈다. `deel -p` 는 잡·CI 에서 돌고 그 뒤에 스크립트가 붙는데, 반쪽짜리
|
|
24
|
+
* 답이 0 으로 넘어가면 그 스크립트는 온전한 답으로 알고 그대로 쓴다.
|
|
25
|
+
* 사람이 나중에 결과를 보고 왜 반쪽인지 되짚을 방법이 없다.
|
|
26
|
+
*/
|
|
27
|
+
cutoff: 5,
|
|
28
|
+
/*
|
|
29
|
+
* 모델이 안 하겠다고 했다 (안전 판정).
|
|
30
|
+
*
|
|
31
|
+
* 이것도 자기 코드가 있어야 한다. 거절한 답은 **아무 일도 안 한 답**인데,
|
|
32
|
+
* 도구 호출이 없다는 것 말고는 짧은 답과 겉모습이 같다. 0 으로 끝내면
|
|
33
|
+
* 뒤에 붙은 스크립트는 일이 된 줄 알고 그 다음 단계로 넘어간다.
|
|
34
|
+
*
|
|
35
|
+
* 오류(1)와도 갈라 둔다. 고칠 자리가 다르기 때문이다 — 오류는 연결이나
|
|
36
|
+
* 열쇠를 보는 일이고, 거절은 **시킨 말을 바꾸는 일**이다.
|
|
37
|
+
*/
|
|
38
|
+
refusal: 6,
|
|
39
|
+
/*
|
|
40
|
+
* 답이 --output-schema 에 안 맞았다.
|
|
41
|
+
*
|
|
42
|
+
* 여기에도 자기 코드가 있어야 한다. 「모양을 못 박아 달라」 고 한 사람에게
|
|
43
|
+
* 모양이 안 맞는 것을 0 으로 넘기면, 파이프 뒤 스크립트가 그걸 온전한
|
|
44
|
+
* 것으로 받아 쓴다 — 그게 이 기능이 없애려던 바로 그 상황이다.
|
|
45
|
+
*
|
|
46
|
+
* 오류(1)와도 가른다. 고칠 자리가 다르다 — 오류는 연결을 보는 일이고,
|
|
47
|
+
* 이건 스키마나 시킨 말을 바꾸는 일이다.
|
|
48
|
+
*/
|
|
49
|
+
schema: 7,
|
|
50
|
+
/*
|
|
51
|
+
* 완료 검사가 통과하지 않은 채 끝났다 (agent/donecheck.js · 2.1.0).
|
|
52
|
+
*
|
|
53
|
+
* 모델은 「다 됐습니다」 라고 했는데 사람이 정해 둔 검사(`--check` · 설정의 `check`)가
|
|
54
|
+
* 정해 둔 판수를 다 돌고도 빨갛거나, 관문에 막혀 아예 못 돌았다. 0 으로 끝내면 야간
|
|
55
|
+
* 배치가 빨간 검사 위에 초록불을 켠다 — 이 기능이 없애려던 바로 그 결말이다.
|
|
56
|
+
*
|
|
57
|
+
* 오류(1)와 가른다. 고칠 자리가 다르다 — 연결이 아니라 코드나 검사 쪽이다.
|
|
58
|
+
*/
|
|
59
|
+
check: 8,
|
|
60
|
+
/*
|
|
61
|
+
* 인자를 잘못 줬다 — 모르는 깃발 · 값 없는 깃발 · 모르는 모드 이름 · 못 읽는 --ctx.
|
|
62
|
+
*
|
|
63
|
+
* 여기에 **따로** 둔다. 처음에는 `--work` 오타를 2 로 끝냈는데, 2 는 이 표에서 이미
|
|
64
|
+
* 「걸음 수 상한」 이다. `deel run --jsn …` 을 CI 에 건 사람은 오타 하나로 「일이 커서
|
|
65
|
+
* 멈췄다」 를 받고 작업을 쪼개러 간다. 고칠 자리가 스크립트 한 줄인데.
|
|
66
|
+
*
|
|
67
|
+
* 64 는 sysexits.h 의 EX_USAGE 다. 1~8 과 안 겹치고, 셸·CI 도구들이 「부른 모양이
|
|
68
|
+
* 틀렸다」 로 이미 알아듣는 수라 새로 지어내지 않았다. 이 경우는 모델을 한 번도 안 부른다.
|
|
69
|
+
*/
|
|
70
|
+
usage: 64,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 모델을 부르기 전에 선 실패 한 덩이 (사냥5 B5-10).
|
|
75
|
+
*
|
|
76
|
+
* 성공한 `--json` 에는 model 과 usage.prompt·cacheRead·cacheWrite·못잰것 이 있는데, 모델을
|
|
77
|
+
* 부르기 전에 선 실패(64 · 7 · 시킬 말 없음 · 없는 뿌리 · 연결 없음 · 대화 화면 전용)에는
|
|
78
|
+
* 그 칸들이 없었다. `jq .usage.prompt` 는 null 을, 모양을 못 박은 파서는 오류를 낸다 —
|
|
79
|
+
* 실패를 제일 잘 다뤄야 할 자리에서 파서가 먼저 죽는다. 칸은 늘 같게 두고 값만 비운다.
|
|
80
|
+
*
|
|
81
|
+
* bin/deel.js 의 인자탈·마지막 catch 도 이걸로 짓는다. 세 벌이면 언젠가 한 벌만 고친다.
|
|
82
|
+
*/
|
|
83
|
+
export function 실패덩이({ reason, code, why = '', model = null }) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false, reason, code, text: '',
|
|
86
|
+
tools: 0, steps: 0,
|
|
87
|
+
usage: { in: 0, out: 0, prompt: 0, cacheRead: 0, cacheWrite: 0, calls: 0, ms: 0, 못잰것: 0, retries: 0, genMs: 0, tokPerSec: null },
|
|
88
|
+
model,
|
|
89
|
+
// 바뀐 파일과 대화 이름 (2.1.3) — 시작도 못 했으니 비었다. 칸은 성공과 같게 둔다.
|
|
90
|
+
files: [], session: null,
|
|
91
|
+
ms: 0,
|
|
92
|
+
...(why ? { why } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* 열어 둔 연결을 닫는다. 프로그램을 끝내기 직전에 부른다.
|
|
98
|
+
*
|
|
99
|
+
* fetch 는 연결을 재사용하려고 소켓을 살려 둔다(keep-alive). 그래서 할 일이
|
|
100
|
+
* 끝나도 프로세스가 저절로 안 끝난다. 예전에는 그걸 process.exit() 으로
|
|
101
|
+
* 잘라 냈는데, 윈도우에서 닫는 중인 핸들을 두고 끊으면 libuv 가 abort 한다.
|
|
102
|
+
*
|
|
103
|
+
* Assertion failed: !(handle->flags & UV_HANDLE_CLOSING), src\win\async.c
|
|
104
|
+
*
|
|
105
|
+
* 실제로 `deel scan` 이 결과를 다 찍고 나서 이렇게 죽었다. 화면에는 정상으로
|
|
106
|
+
* 보이는데 종료코드는 3221226505(0xC0000409) 였다.
|
|
107
|
+
*
|
|
108
|
+
* 그래서 잘라 내는 대신 닫는다. 이 자리는 Node 내부 이름이라 없을 수도 있으므로,
|
|
109
|
+
* 없으면 조용히 넘어간다 — 그때는 부르는 쪽의 시간제한이 받아 준다.
|
|
110
|
+
* 프록시 길은 요청마다 소켓을 새로 열고 끝나면 닫으므로(Connection: close) 여기 안 온다.
|
|
111
|
+
*/
|
|
112
|
+
export function closeConnections() {
|
|
113
|
+
try {
|
|
114
|
+
const d = globalThis[Symbol.for('undici.globalDispatcher.1')];
|
|
115
|
+
if (d && typeof d.close === 'function') return d.close().catch(() => {});
|
|
116
|
+
} catch { /* 없으면 그만 */ }
|
|
117
|
+
return Promise.resolve();
|
|
118
|
+
}
|
package/src/i18n/en.js
CHANGED
|
@@ -319,7 +319,7 @@ export const en = {
|
|
|
319
319
|
'approve.auto.line': 'edits without asking. /undo is the safety net',
|
|
320
320
|
'approve.confirm.name': 'risky only',
|
|
321
321
|
'approve.confirm.short': 'risky',
|
|
322
|
-
'approve.confirm.line': 'asks before commands it cannot take back. Files are edited without asking',
|
|
322
|
+
'approve.confirm.line': 'asks before commands it cannot take back and MCP tools. Files are edited without asking',
|
|
323
323
|
'approve.strict.name': 'ask always',
|
|
324
324
|
'approve.strict.short': 'always',
|
|
325
325
|
'approve.strict.line': 'asks before every file edit and every command',
|
|
@@ -518,14 +518,19 @@ export const en = {
|
|
|
518
518
|
'ev.hookNote': 'hook: {말}',
|
|
519
519
|
'ev.hookBlock': 'A hook blocked this',
|
|
520
520
|
'ev.nudgeRead': 'It was about to finish having only read things — pushed back once',
|
|
521
|
+
'ev.textCalls': 'The model wrote {n} tool call(s) as text — running them: {이름}',
|
|
521
522
|
'check.start': 'Completion check ({판}/{최대}) — {명령}',
|
|
522
523
|
'check.clamped': '{칸} {준값} is over the limit — using {쓴값}',
|
|
524
|
+
'check.invalid': '{칸} {준값} is not a usable value — using the default {쓴값}',
|
|
523
525
|
'check.pass': 'Completion check passed — {명령}',
|
|
524
526
|
'check.fail': 'Completion check failed ({판}/{최대}) — {요약}',
|
|
525
527
|
'check.retry': 'Sending the failure back to fix',
|
|
526
528
|
'check.gaveUp': 'Still failing after {판} runs — ending as failed',
|
|
527
529
|
'check.skipped': 'Could not run the completion check — {까닭}',
|
|
528
530
|
'cli.checkFlag': 'run this check before finishing; failures go back to be fixed, and still failing ends with 8',
|
|
531
|
+
'cli.checkRoundsFlag': 'for this run only: how many times the check runs (1-10; fixes = runs - 1) and the time limit per run (s)',
|
|
532
|
+
'cli.runResumeFlag': 'runs are saved in .deel/sessions like chats and can be continued — the name is session in --json',
|
|
533
|
+
'cli.eventsFlag': 'stream events to this file, one JSON per line (the last line is the result)',
|
|
529
534
|
'cli.evalTitle': 'Golden set',
|
|
530
535
|
'cli.evalWhy': '— run a set of tasks on the real model and measure how many it gets done',
|
|
531
536
|
'cli.evalInit': 'create five example tasks in golden/',
|
|
@@ -575,11 +580,13 @@ export const en = {
|
|
|
575
580
|
'cost.tokIn': 'Input tokens',
|
|
576
581
|
'cost.tokOut': 'Output tokens',
|
|
577
582
|
'cost.toolMs': 'Time in tools',
|
|
583
|
+
'cost.speed': 'Generation speed',
|
|
578
584
|
'cost.elapsed': 'Elapsed',
|
|
579
585
|
'cost.money': 'Cost',
|
|
580
586
|
// ── Cache, wire card, automatic effort ────────────────────────────────
|
|
581
587
|
'status.wire': 'wire',
|
|
582
588
|
'wire.think': 'thinking',
|
|
589
|
+
'run.notSaving': 'Could not write all of this run to disk ({까닭}) — {n} lines lost. session is empty in --json — this run cannot be resumed.',
|
|
583
590
|
'run.refusal': 'The model declined this request — stopping here instead of pushing again',
|
|
584
591
|
'run.refusalWhy': 'reason {왜}',
|
|
585
592
|
'wire.rungs': 'rungs',
|
package/src/i18n/ja.js
CHANGED
|
@@ -286,7 +286,7 @@ export const ja = {
|
|
|
286
286
|
'approve.auto.line': '訊かずに直します。/undo が受け皿です',
|
|
287
287
|
'approve.confirm.name': '危ないものだけ',
|
|
288
288
|
'approve.confirm.short': '危険時',
|
|
289
|
-
'approve.confirm.line': '
|
|
289
|
+
'approve.confirm.line': '取り消せないコマンドと MCP ツールの前に訊きます。ファイルは訊かずに直します',
|
|
290
290
|
'approve.strict.name': '毎回訊く',
|
|
291
291
|
'approve.strict.short': '毎回',
|
|
292
292
|
'approve.strict.line': 'ファイルを直すたび、コマンドを打つたびに訊きます',
|
|
@@ -476,14 +476,19 @@ export const ja = {
|
|
|
476
476
|
'ev.hookNote': 'フック: {말}',
|
|
477
477
|
'ev.hookBlock': 'フックが止めました',
|
|
478
478
|
'ev.nudgeRead': '読むだけで終えようとしたので、一度押し戻しました',
|
|
479
|
+
'ev.textCalls': 'モデルがテキストで書いたツール呼び出し{n}件を読み取って実行します — {이름}',
|
|
479
480
|
'check.start': '完了チェック ({판}/{최대}) — {명령}',
|
|
480
481
|
'check.clamped': '{칸} {준값} は上限を超えるため {쓴값} にしました',
|
|
482
|
+
'check.invalid': '{칸} {준값} は使えない値のため既定の {쓴값} を使います',
|
|
481
483
|
'check.pass': '完了チェック合格 — {명령}',
|
|
482
484
|
'check.fail': '完了チェック失敗 ({판}/{최대}) — {요약}',
|
|
483
485
|
'check.retry': '失敗内容を返して直させます',
|
|
484
486
|
'check.gaveUp': '{판}回回しても失敗しました — 失敗として終えます',
|
|
485
487
|
'check.skipped': '完了チェックを回せませんでした — {까닭}',
|
|
486
488
|
'cli.checkFlag': '終える前にこのチェックを回し、通れば終了(失敗なら直させ、最後まで失敗なら 8)',
|
|
489
|
+
'cli.checkRoundsFlag': 'この実行だけ:チェックを回す回数(1〜10、直す機会は回数−1)と1回の制限時間(秒)',
|
|
490
|
+
'cli.runResumeFlag': '会話画面と同じく .deel/sessions に残り、続けられます — 名前は --json の session',
|
|
491
|
+
'cli.eventsFlag': 'イベントをこのファイルに1行1つの JSON で(最後の行は結果)',
|
|
487
492
|
'cli.evalTitle': 'ゴールデンセット',
|
|
488
493
|
'cli.evalWhy': '— 課題集を実際のモデルで回し、いくつこなせるかを測ります',
|
|
489
494
|
'cli.evalInit': 'golden/ に例題を五つ作ります',
|
|
@@ -532,11 +537,13 @@ export const ja = {
|
|
|
532
537
|
'cost.tokIn': '入力トークン',
|
|
533
538
|
'cost.tokOut': '出力トークン',
|
|
534
539
|
'cost.toolMs': 'ツール時間',
|
|
540
|
+
'cost.speed': '生成速度',
|
|
535
541
|
'cost.elapsed': '経過',
|
|
536
542
|
'cost.money': '料金',
|
|
537
543
|
// ── キャッシュ・配線カード・自動強度 ──────────────────────────────────
|
|
538
544
|
'status.wire': '配線',
|
|
539
545
|
'wire.think': '思考',
|
|
546
|
+
'run.notSaving': 'この実行の会話をファイルに書き切れませんでした({까닭})— {n}行を失いました。--json の session は空です — この会話は続けられません。',
|
|
540
547
|
'run.refusal': 'モデルがこの依頼を断りました — 押し直さずにここで止めます',
|
|
541
548
|
'run.refusalWhy': '理由 {왜}',
|
|
542
549
|
'wire.rungs': '目盛り',
|
package/src/i18n/ko.js
CHANGED
|
@@ -308,7 +308,7 @@ export const ko = {
|
|
|
308
308
|
'approve.auto.line': '안 묻고 고칩니다. 되돌리기(/undo)가 안전망입니다',
|
|
309
309
|
'approve.confirm.name': '위험만 확인',
|
|
310
310
|
'approve.confirm.short': '위험만',
|
|
311
|
-
'approve.confirm.line': '되돌릴 수 없는
|
|
311
|
+
'approve.confirm.line': '되돌릴 수 없는 명령·MCP 도구만 물어봅니다. 파일은 안 묻고 고칩니다',
|
|
312
312
|
'approve.strict.name': '모두 확인',
|
|
313
313
|
'approve.strict.short': '모두',
|
|
314
314
|
'approve.strict.line': '파일을 고치거나 명령을 돌리기 전에 매번 물어봅니다',
|
|
@@ -550,14 +550,19 @@ export const ko = {
|
|
|
550
550
|
'ev.hookNote': '훅: {말}',
|
|
551
551
|
'ev.hookBlock': '훅이 막았습니다',
|
|
552
552
|
'ev.nudgeRead': '읽기만 하고 끝내려고 해서 한 번 되밀었습니다',
|
|
553
|
+
'ev.textCalls': '모델이 글로 적은 도구 부름 {n}개를 알아듣고 돌립니다 — {이름}',
|
|
553
554
|
'check.start': '완료 검사 ({판}/{최대}) — {명령}',
|
|
554
555
|
'check.clamped': '{칸} {준값} 은 상한을 넘어 {쓴값} 으로 줄였습니다',
|
|
556
|
+
'check.invalid': '{칸} {준값} 은 쓸 수 없는 값이라 기본값 {쓴값} 을 씁니다',
|
|
555
557
|
'check.pass': '완료 검사 통과 — {명령}',
|
|
556
558
|
'check.fail': '완료 검사 실패 ({판}/{최대}) — {요약}',
|
|
557
559
|
'check.retry': '실패 내용을 돌려주고 다시 고치게 합니다',
|
|
558
560
|
'check.gaveUp': '{판}번 돌렸는데도 실패했습니다 — 실패로 끝냅니다',
|
|
559
561
|
'check.skipped': '완료 검사를 못 돌렸습니다 — {까닭}',
|
|
560
562
|
'cli.checkFlag': '끝내려 할 때 이 검사를 돌려 통과해야 끝남 (실패하면 고치게 하고, 끝내 실패면 8)',
|
|
563
|
+
'cli.checkRoundsFlag': '이번 실행에서만 검사 판수(1~10, 고칠 기회는 판수−1)·한 번의 제한 시간(초)을 덮음',
|
|
564
|
+
'cli.runResumeFlag': '대화 화면처럼 .deel/sessions 에 남고 이어 합니다 — 이름은 --json 의 session',
|
|
565
|
+
'cli.eventsFlag': '사건을 이 파일에 한 줄에 하나씩 JSON 으로 (마지막 줄은 결과)',
|
|
561
566
|
'cli.evalTitle': '골든셋',
|
|
562
567
|
'cli.evalWhy': '— 과제 모음을 실제 모델로 돌려 몇 개를 해내나 잽니다',
|
|
563
568
|
'cli.evalInit': '예제 과제 다섯을 golden/ 에 만듭니다',
|
|
@@ -623,11 +628,13 @@ export const ko = {
|
|
|
623
628
|
'cost.tokIn': '입력 토큰',
|
|
624
629
|
'cost.tokOut': '출력 토큰',
|
|
625
630
|
'cost.toolMs': '도구 시간',
|
|
631
|
+
'cost.speed': '생성 속도',
|
|
626
632
|
'cost.elapsed': '경과',
|
|
627
633
|
'cost.money': '요금',
|
|
628
634
|
// ── 캐시·전선·자동 강도 (backend/wire.js · backend/cachemark.js) ──────
|
|
629
635
|
'status.wire': '전선',
|
|
630
636
|
'wire.think': '생각',
|
|
637
|
+
'run.notSaving': '이 실행의 대화를 파일에 다 못 적었습니다 ({까닭}) — {n}줄을 잃었습니다. --json 의 session 을 비웠습니다 — 이 대화는 이어 할 수 없습니다.',
|
|
631
638
|
'run.refusal': '모델이 이 요청을 거절했습니다 — 되밀지 않고 여기서 멈춥니다',
|
|
632
639
|
'run.refusalWhy': '까닭 {왜}',
|
|
633
640
|
'wire.rungs': '눈금',
|
package/src/i18n/zh.js
CHANGED
|
@@ -286,7 +286,7 @@ export const zh = {
|
|
|
286
286
|
'approve.auto.line': '不问就改。/undo 是兜底',
|
|
287
287
|
'approve.confirm.name': '只问危险的',
|
|
288
288
|
'approve.confirm.short': '危险时',
|
|
289
|
-
'approve.confirm.line': '
|
|
289
|
+
'approve.confirm.line': '收不回的命令和 MCP 工具之前会问。改文件不问',
|
|
290
290
|
'approve.strict.name': '每次都问',
|
|
291
291
|
'approve.strict.short': '每次',
|
|
292
292
|
'approve.strict.line': '每改一个文件、每跑一条命令都问',
|
|
@@ -476,14 +476,19 @@ export const zh = {
|
|
|
476
476
|
'ev.hookNote': '钩子:{말}',
|
|
477
477
|
'ev.hookBlock': '钩子拦下了这一步',
|
|
478
478
|
'ev.nudgeRead': '只看不动就要收尾,已经推回去一次',
|
|
479
|
+
'ev.textCalls': '模型以文字写出了 {n} 个工具调用,已识别并执行 — {이름}',
|
|
479
480
|
'check.start': '完成检查 ({판}/{최대}) — {명령}',
|
|
480
481
|
'check.clamped': '{칸} {준값} 超过上限,改用 {쓴값}',
|
|
482
|
+
'check.invalid': '{칸} {준값} 不是可用的值,改用默认值 {쓴값}',
|
|
481
483
|
'check.pass': '完成检查通过 — {명령}',
|
|
482
484
|
'check.fail': '完成检查失败 ({판}/{최대}) — {요약}',
|
|
483
485
|
'check.retry': '把失败内容交回去重新修',
|
|
484
486
|
'check.gaveUp': '跑了 {판} 次仍然失败 — 按失败结束',
|
|
485
487
|
'check.skipped': '没能跑完成检查 — {까닭}',
|
|
486
488
|
'cli.checkFlag': '结束前跑这个检查,通过才结束(失败就让它修,最后仍失败则返回 8)',
|
|
489
|
+
'cli.checkRoundsFlag': '仅本次运行:检查跑几次(1~10,修复机会 = 次数 − 1)和每次的时限(秒)',
|
|
490
|
+
'cli.runResumeFlag': '与对话界面一样保存在 .deel/sessions 并可继续 — 名称是 --json 的 session',
|
|
491
|
+
'cli.eventsFlag': '把事件逐行以 JSON 写入此文件(最后一行是结果)',
|
|
487
492
|
'cli.evalTitle': '黄金集',
|
|
488
493
|
'cli.evalWhy': '— 用真实模型跑一组任务,测它能完成多少',
|
|
489
494
|
'cli.evalInit': '在 golden/ 里建五个示例任务',
|
|
@@ -532,11 +537,13 @@ export const zh = {
|
|
|
532
537
|
'cost.tokIn': '输入 token',
|
|
533
538
|
'cost.tokOut': '输出 token',
|
|
534
539
|
'cost.toolMs': '工具耗时',
|
|
540
|
+
'cost.speed': '生成速度',
|
|
535
541
|
'cost.elapsed': '已用时',
|
|
536
542
|
'cost.money': '费用',
|
|
537
543
|
// ── 缓存 · 线路卡 · 自动强度 ──────────────────────────────────────────
|
|
538
544
|
'status.wire': '线路',
|
|
539
545
|
'wire.think': '思考',
|
|
546
|
+
'run.notSaving': '本次运行的对话没能全部写入文件({까닭})— 丢失 {n} 行。--json 的 session 为空 — 无法继续这段对话。',
|
|
540
547
|
'run.refusal': '模型拒绝了这个请求 — 不再重试,就此停止',
|
|
541
548
|
'run.refusalWhy': '原因 {왜}',
|
|
542
549
|
'wire.rungs': '档位',
|
package/src/lsp/diag.js
CHANGED
|
@@ -100,7 +100,8 @@ export async function 편집후진단(뿌리, abs, { 시한 = 기다릴시한 }
|
|
|
100
100
|
*/
|
|
101
101
|
export function 붙이기(결과, 진단, 보일이름) {
|
|
102
102
|
if (!진단 || (!진단.오류 && !진단.경고)) return 결과;
|
|
103
|
-
|
|
103
|
+
// 언어 서버가 못 준 자리에서 문법만 본 것(tools/verify.js 의 한파일문법)은 그렇게 적는다 — 뜻까지 본 것처럼 읽히면 안 된다.
|
|
104
|
+
const 머리 = `${진단.출처 ? `문법 검사(${진단.출처})` : '언어 서버'} — ${보일이름}: `
|
|
104
105
|
+ [진단.오류 ? `오류 ${진단.오류}개` : '', 진단.경고 ? `경고 ${진단.경고}개` : ''].filter(Boolean).join(' · ');
|
|
105
106
|
return {
|
|
106
107
|
...결과,
|