deel-local-cli 1.1.1 → 1.4.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.en.md +826 -19
- package/README.md +689 -14
- package/bin/deel.js +73 -4
- package/package.json +7 -3
- package/src/acp/jsonrpc.js +230 -0
- package/src/acp/map.js +219 -0
- package/src/acp/serve.js +556 -0
- package/src/agent/budget.js +0 -14
- package/src/agent/card.js +110 -0
- package/src/agent/compact.js +95 -0
- package/src/agent/evidence.js +186 -0
- package/src/agent/evolve.js +213 -0
- package/src/agent/grade.js +20 -0
- package/src/agent/loop.js +172 -14
- package/src/agent/models.js +169 -0
- package/src/agent/modes.js +49 -1
- package/src/agent/pins.js +140 -0
- package/src/agent/project.js +10 -4
- package/src/agent/session.js +359 -11
- package/src/agent/store.js +31 -0
- package/src/agent/threads.js +154 -0
- package/src/commands.js +751 -55
- package/src/config.js +10 -1
- package/src/i18n/en.js +244 -0
- package/src/i18n/index.js +126 -0
- package/src/i18n/ko.js +231 -0
- package/src/lsp/client.js +459 -0
- package/src/lsp/diag.js +112 -0
- package/src/lsp/rpc.js +84 -0
- package/src/lsp/servers.js +218 -0
- package/src/oneshot.js +23 -0
- package/src/pack/sbom.js +218 -0
- package/src/pack/selfpack.js +19 -3
- package/src/repl.js +273 -22
- package/src/safety/guard.js +37 -2
- package/src/safety/secrets.js +205 -0
- package/src/safety/undo.js +11 -4
- package/src/setup.js +2 -2
- package/src/skills/discover.js +1 -1
- package/src/tools/desc.en.js +219 -0
- package/src/tools/edit-match.js +16 -5
- package/src/tools/excel-com.js +1 -1
- package/src/tools/excel.js +1 -1
- package/src/tools/fsutil.js +0 -8
- package/src/tools/index.js +149 -6
- package/src/tools/lsp.js +327 -0
- package/src/tools/task.js +30 -2
- package/src/tools/todo.js +19 -3
- package/src/ui/ansi.js +42 -2
- package/src/ui/approve.js +25 -21
- package/src/ui/inputbox.js +69 -13
- package/src/ui/intro.js +174 -0
- package/src/ui/level.js +11 -5
- package/src/ui/md.js +227 -0
- package/src/ui/notify.js +101 -0
- package/src/ui/prompt.js +1 -1
- package/src/ui/screen.js +1 -1
- package/src/ui/status.js +190 -34
- package/src/ui/working.js +0 -3
- package/src/ui/wrap.js +1 -8
package/README.md
CHANGED
|
@@ -54,16 +54,22 @@
|
|
|
54
54
|
- [쉬움 · 개발자](#쉬움--개발자)
|
|
55
55
|
- [도구](#도구)
|
|
56
56
|
- [한글 문서와 엑셀](#한글-문서와-엑셀)
|
|
57
|
+
- [만든 웹을 그 자리에서 띄웁니다](#만든-웹을-그-자리에서-띄웁니다)
|
|
57
58
|
- [스킬·플러그인](#스킬플러그인)
|
|
58
59
|
- [추론 강도](#추론-강도)
|
|
59
60
|
- [자동 압축](#자동-압축)
|
|
60
61
|
- [대화 이어하기](#대화-이어하기)
|
|
61
62
|
- [밖에서 도구 붙이기 (MCP)](#밖에서-도구-붙이기-mcp)
|
|
63
|
+
- [에디터 안에서 쓰기 (ACP)](#에디터-안에서-쓰기-acp)
|
|
64
|
+
- [비밀이 새지 않게](#비밀이-새지-않게)
|
|
62
65
|
- [안전망](#안전망)
|
|
63
66
|
- [사내 반입](#사내-반입)
|
|
64
67
|
- [설정](#설정)
|
|
65
68
|
- [문제 해결](#문제-해결)
|
|
66
69
|
- [개발](#개발)
|
|
70
|
+
- [릴리스 노트](#릴리스-노트)
|
|
71
|
+
|
|
72
|
+
각 절은 요약만 펴 두었습니다. **▸ 자세히** 를 누르면 그 안의 이야기가 펼쳐집니다.
|
|
67
73
|
|
|
68
74
|
---
|
|
69
75
|
|
|
@@ -212,6 +218,9 @@ LM Studio 는 `/api/v0/models`, llama.cpp 는 `/props`. 못 알아보면 `(추
|
|
|
212
218
|
|
|
213
219
|
등록한 뒤에는 대화 중 `/model` 로 갈아탑니다. **대화 내용은 그대로 이어집니다.**
|
|
214
220
|
|
|
221
|
+
<details>
|
|
222
|
+
<summary><b>자세히</b> — 걸린 모델에 맞춰 스스로 바뀝니다 · 작은 창에서는 고정 몫을 줄입니다 · 켤 때 이 폴더가 무슨 프로젝트인지 읽습니다</summary>
|
|
223
|
+
|
|
215
224
|
### 걸린 모델에 맞춰 스스로 바뀝니다
|
|
216
225
|
|
|
217
226
|
여러 모델을 왔다 갔다 쓰면, 어느 한 모델에 맞춰 박아 둔 숫자는 나머지 전부에서
|
|
@@ -354,6 +363,8 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
354
363
|
|
|
355
364
|
파일 600개짜리 폴더에서 7ms 입니다(`test/project.test.js`).
|
|
356
365
|
|
|
366
|
+
</details>
|
|
367
|
+
|
|
357
368
|
---
|
|
358
369
|
|
|
359
370
|
## 대화 중 명령
|
|
@@ -363,13 +374,22 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
363
374
|
| 명령 | 하는 일 |
|
|
364
375
|
|---|---|
|
|
365
376
|
| `/help` | 명령 목록 |
|
|
377
|
+
| `/bell [on|off]` | 다 됐을 때·물어볼 때 종소리와 창 제목 |
|
|
378
|
+
| `/lang [ko|en]` | 화면 말 — 영어권 사람이 쓸 때. 모델이 읽는 글도 같이 따라간다(영어 쪽이 1,400토큰 덜 먹는다). 코드는 그대로 |
|
|
379
|
+
| `/consult <프로필> <질문>` | 다른 모델에게 한 번 물어보기 — 지금 쓰는 것은 안 바꿈 |
|
|
380
|
+
| `/lsp [on\|off]` | 언어 서버 — 무엇이 깔려 있고 `Def`·`Refs` 를 쓸 수 있는지. `off` 는 고친 뒤 진단만 끔 |
|
|
366
381
|
| `/context` | 무엇이 컨텍스트를 먹고 있는지 |
|
|
367
382
|
| `/ctx [auto\|숫자\|자세히]` | 컨텍스트 **길이** — 모델에 맞춰 다시 재거나 직접 지정 |
|
|
368
383
|
| `/out [숫자\|auto]` | 한 번에 받을 **답 길이** 상한 — 큰 파일이 잘리면 여기를 올립니다 |
|
|
369
384
|
| `/grade [작음\|보통\|큼\|auto]` | 모델 **급** — 얼마나 알아서 하나. `/ctx` 와 다른 축입니다 |
|
|
370
385
|
| `/compact` | 앞선 대화를 요약해서 접기 |
|
|
371
386
|
| `/clear` | 대화 비우기 (연결·규칙은 유지) |
|
|
387
|
+
| `/thread [new\|fork\|close\|번호]` | 대화 갈래 — 곁가지를 딴 자리에서. 연결·되돌리기는 같이 씁니다 |
|
|
388
|
+
| `/learned [지우기]` | 쓰면서 저절로 알게 된 것 — 되는 명령·이 모델의 버릇 |
|
|
389
|
+
| `/pin <말>` | 못 박기 — 접거나 요약해도 **안 지워지는** 말 |
|
|
390
|
+
| `/evidence [파일]` | 증거 — 무엇을 바꿨고 무엇이 그걸 증명하나. **안 된 것도** 적습니다 |
|
|
372
391
|
| `/model` | 연결·모델 바꾸기 |
|
|
392
|
+
| `/model 카드` | 이 모델을 겪어 본 결과 — 그래서 deel 이 무엇을 바꿔 뒀는지 |
|
|
373
393
|
| `/think <강도>` | 추론 강도 (`off·low·medium·high·max`) |
|
|
374
394
|
| `/think 배분 <배분>` | 단계별 배분 (`균일·절약·깊게`) |
|
|
375
395
|
| `/think 자세히` | 단계표 — 어느 단계를 어떤 강도·상한으로 도는지 |
|
|
@@ -380,6 +400,7 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
380
400
|
| `/level [수준]` | 화면에 무엇을 내놓을지 (`쉬움` · `개발자`) |
|
|
381
401
|
| `/undo [턴수]` | 파일 변경 되돌리기 |
|
|
382
402
|
| `/diff [파일]` | 이번 대화에서 바뀐 파일 · 바뀐 자리 보기 |
|
|
403
|
+
| `/preview [폴더\|파일\|off]` | 만든 웹을 이 자리에서 띄워 보기 — 브라우저가 같이 열립니다 |
|
|
383
404
|
| `/tools` | 쓸 수 있는 도구 |
|
|
384
405
|
| `/skills [검색어\|all\|off]` | 스킬 보기·검색·골라 올리기 |
|
|
385
406
|
| `/plugin [install\|remove\|pack]` | 플러그인 관리 |
|
|
@@ -408,6 +429,9 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
408
429
|
|
|
409
430
|
한글 조합·붙여넣기·`Ctrl+A/E`·백스페이스는 전부 그대로 됩니다.
|
|
410
431
|
|
|
432
|
+
<details>
|
|
433
|
+
<summary><b>자세히</b> — @파일 로 바로 붙이기 · 도중에 멈추기</summary>
|
|
434
|
+
|
|
411
435
|
### `@파일` 로 바로 붙이기
|
|
412
436
|
|
|
413
437
|
말 속에 `@` 뒤로 경로를 쓰면 그 파일을 말과 함께 바로 보냅니다.
|
|
@@ -467,6 +491,8 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
467
491
|
|
|
468
492
|
발견된 스킬의 명령은 `/<플러그인>:<이름>` 으로 부르고 `$ARGUMENTS` 가 치환됩니다.
|
|
469
493
|
|
|
494
|
+
</details>
|
|
495
|
+
|
|
470
496
|
---
|
|
471
497
|
|
|
472
498
|
## 작업 모드
|
|
@@ -495,6 +521,9 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
495
521
|
`/think` 나 `/mode` 를 직접 고른 적이 있으면 그 선택이 우선합니다.
|
|
496
522
|
모드가 사람이 고른 값을 덮어쓰지 않습니다.
|
|
497
523
|
|
|
524
|
+
<details>
|
|
525
|
+
<summary><b>자세히</b> — 저절로 옮겨 가기 (종합 모드)</summary>
|
|
526
|
+
|
|
498
527
|
### 저절로 옮겨 가기 (종합 모드)
|
|
499
528
|
|
|
500
529
|
처음에는 **종합** 으로 시작합니다. 무슨 일이 올지 모르는 상태입니다.
|
|
@@ -537,6 +566,8 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
537
566
|
|
|
538
567
|
직접 고르면 그때부터 **고정** 됩니다. 다시 맡기려면 `/auto` 또는 `/work 종합`.
|
|
539
568
|
|
|
569
|
+
</details>
|
|
570
|
+
|
|
540
571
|
---
|
|
541
572
|
|
|
542
573
|
## 쉬움 · 개발자
|
|
@@ -558,6 +589,9 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
558
589
|
- **초보라고 승인을 덜 받지 않습니다.** 되돌리기·작업 범위·위험 명령 차단은 두 수준이 같습니다.
|
|
559
590
|
초보일수록 되돌릴 수 있어야 합니다.
|
|
560
591
|
|
|
592
|
+
<details>
|
|
593
|
+
<summary><b>자세히</b> — 입력칸 · 명령은 다 안 쳐도 됩니다 · 일하는 중에는 상자가 그대로 있습니다 · 왼쪽 그림도 같이 움직입니다 외 1개</summary>
|
|
594
|
+
|
|
561
595
|
### 입력칸
|
|
562
596
|
|
|
563
597
|
터미널에서 그냥 켜면 **대화는 위로 흘러가고, 맨 아래에 입력 상자가 붙습니다.**
|
|
@@ -747,6 +781,8 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
747
781
|
> 방식이 화면에서 통째로 사라지고 있었습니다. 지금은 **모델 이름을 먼저 줄입니다** —
|
|
748
782
|
> 무엇으로 도는지는 이미 알지만, 내 파일이 안 물어보고 바뀌는지는 지금 봐야 압니다.
|
|
749
783
|
|
|
784
|
+
</details>
|
|
785
|
+
|
|
750
786
|
---
|
|
751
787
|
|
|
752
788
|
## 도구
|
|
@@ -771,6 +807,8 @@ node 프로젝트 (deel-local-cli) · git main
|
|
|
771
807
|
| `Verify` | 만든 것이 **진짜 되는지** 확인 |
|
|
772
808
|
| `Task` | 큰 일의 한 덩이를 **따로 떨어진 창**에서 돌리기 |
|
|
773
809
|
| `Jobs` | **뒤에서 도는 명령** 보기·읽기·끝내기 — `Bash` 의 `background` 와 짝 |
|
|
810
|
+
| `Def` | 이름이 **어디 정의됐는지** — 언어 서버가 깔려 있을 때만 보입니다 |
|
|
811
|
+
| `Refs` | 이름을 **어디서 쓰는지** 전부 — 언어 서버가 깔려 있을 때만 보입니다 |
|
|
774
812
|
|
|
775
813
|
Claude Code 에 없는 것은 일곱입니다 — `Append` · `Recall` · `Remember` ·
|
|
776
814
|
`Outline` · `Verify` · `Task` · `Jobs`. 도구 하나가 스키마로 150~400토큰을 먹고
|
|
@@ -778,6 +816,9 @@ Claude Code 에 없는 것은 일곱입니다 — `Append` · `Recall` · `Remem
|
|
|
778
816
|
(`test/loop.test.js`). 뒤의 넷은 그 값을 치르고도 넣을 만해서 넣은 것들이라,
|
|
779
817
|
아래에 왜인지를 적어 뒀습니다.
|
|
780
818
|
|
|
819
|
+
<details>
|
|
820
|
+
<summary><b>자세히</b> — Outline · Verify · Task · Def · Refs · 끝나지 않는 명령은 뒤에서 외 9개</summary>
|
|
821
|
+
|
|
781
822
|
### 프로젝트 모양을 싸게 봅니다 — `Outline`
|
|
782
823
|
|
|
783
824
|
전에는 남의 코드를 이해하는 길이 둘뿐이었습니다. `Glob` 은 경로만 주고,
|
|
@@ -1190,10 +1231,124 @@ $ /diff
|
|
|
1190
1231
|
`/diff` 는 **쉬움 수준의 명령 목록에도 들어 있습니다.** `auto` 가 안 물어보고
|
|
1191
1232
|
고치는 이상, 초보일수록 '무엇이 바뀌었나' 를 볼 통로가 필요합니다.
|
|
1192
1233
|
|
|
1234
|
+
### 언어 서버가 있으면 뜻까지 봅니다 — `Def` · `Refs`
|
|
1235
|
+
|
|
1236
|
+
`Grep` 은 **글자**를 찾고 언어 서버는 **뜻**을 압니다. `run` 을 `Grep` 으로 찾으면
|
|
1237
|
+
주석에 든 run, 남의 라이브러리의 run, 문자열 안의 run 이 다 같이 나옵니다. 그중
|
|
1238
|
+
진짜 그 함수를 부르는 자리가 몇 개인지는 사람이 하나씩 열어 봐야 압니다. 모델은
|
|
1239
|
+
그 값을 못 치르니 앞의 몇 개만 보고 고치고, **놓친 자리는 돌려 본 뒤에야** 나옵니다.
|
|
1240
|
+
|
|
1241
|
+
```
|
|
1242
|
+
⏺ Refs(셈하기)
|
|
1243
|
+
셈하기 — 쓰는 자리 3곳 · 파일 2개
|
|
1244
|
+
|
|
1245
|
+
src/쓰는곳.py (2)
|
|
1246
|
+
4: return 셈하기(1, 2)
|
|
1247
|
+
9: return 셈하기(x, x)
|
|
1248
|
+
src/또다른곳.py (1)
|
|
1249
|
+
2: 값 = 셈하기(9, 9)
|
|
1250
|
+
```
|
|
1251
|
+
|
|
1252
|
+
`Grep` 은 그대로 남습니다. 오히려 이름을 통째로 바꿀 때는 `Grep` 쪽이 필요합니다 —
|
|
1253
|
+
언어 서버는 주석·설정·문서를 안 봅니다. 그래서 이 둘은 **더해 주는 것**이지
|
|
1254
|
+
갈아 끼우는 것이 아닙니다.
|
|
1255
|
+
|
|
1256
|
+
자리(줄·칸) 대신 **이름**을 받습니다. LSP 는 "이 파일 이 줄 이 칸" 을 묻는 규약인데
|
|
1257
|
+
모델은 칸 번호를 모릅니다. 알려면 파일을 먼저 `Read` 해야 하고, 그러면 이 도구를
|
|
1258
|
+
쓰는 값이 통째로 사라집니다. 그래서 `workspace/symbol` 로 자리를 먼저 찾고 그
|
|
1259
|
+
자리로 다시 묻습니다. 같은 이름이 여러 곳이면 **그 목록을 그대로 보여 줍니다** —
|
|
1260
|
+
하나를 골라 주고 아닌 척하지 않습니다.
|
|
1261
|
+
|
|
1262
|
+
### 고친 직후에 그 파일이 성한지 봅니다
|
|
1263
|
+
|
|
1264
|
+
`Verify` 도 그대로 남습니다. 하는 일이 다릅니다.
|
|
1265
|
+
|
|
1266
|
+
| | 언제 | 무엇을 |
|
|
1267
|
+
|---|---|---|
|
|
1268
|
+
| `Verify` | 일 다 끝내고 한 번 | **문법** (`node --check` · `py_compile`) |
|
|
1269
|
+
| 고친 뒤 진단 | 고친 직후 그 파일만 | **뜻** (없는 이름 · 안 맞는 타입 · 빠진 인자) |
|
|
1270
|
+
|
|
1271
|
+
문법은 맞는데 틀린 것들이 있습니다. `node --check` 는 다 통과시킵니다.
|
|
1272
|
+
|
|
1273
|
+
```
|
|
1274
|
+
⏺ Write(pkg/bad.py)
|
|
1275
|
+
3줄
|
|
1276
|
+
언어 서버 — pkg/bad.py: 오류 2개
|
|
1277
|
+
1줄 오류: Type "Literal['글자']" is not assignable to declared type "int"
|
|
1278
|
+
2줄 오류: "없는이름" is not defined
|
|
1279
|
+
```
|
|
1280
|
+
|
|
1281
|
+
지금까지는 이런 것이 **돌려 본 뒤에야** 나왔고, 돌려 보는 것은 사용자 승인을
|
|
1282
|
+
거치는 일이라 몇 걸음 뒤였습니다. 그 사이에 모델은 그 파일을 끝낸 것으로 치고
|
|
1283
|
+
다음 파일로 갑니다. 나중에 오류가 나오면 어디서부터 잘못됐는지를 되짚어야 하는데,
|
|
1284
|
+
되짚는 값이 고치는 값보다 큽니다.
|
|
1285
|
+
|
|
1286
|
+
성할 때는 **아무 말도 안 합니다.** 고칠 때마다 "오류 0개" 를 한 줄씩 붙이면 창이
|
|
1287
|
+
그만큼 찹니다. 그리고 진단을 못 받은 것과 오류가 없는 것은 다릅니다 — 못 받았으면
|
|
1288
|
+
아무 말도 안 합니다. 없는 말을 지어내지 않습니다.
|
|
1289
|
+
|
|
1290
|
+
### 아무것도 깔지 않습니다
|
|
1291
|
+
|
|
1292
|
+
**이 프로그램은 언어 서버를 깔아 주지 않습니다.** PATH 를 훑어보고, 있으면 쓰고
|
|
1293
|
+
없으면 `Grep`·`Outline` 으로 갑니다. 사내에 미승인 SW 를 못 들이는 자리가 이
|
|
1294
|
+
프로그램이 존재하는 이유라, 도구가 `npm i -g` 를 제 마음대로 부르면 안 됩니다.
|
|
1295
|
+
|
|
1296
|
+
없으면 `Def`·`Refs` 는 **모델 목록에 아예 안 나옵니다.** 오프라인일 때 웹 도구를
|
|
1297
|
+
숨기는 것과 같습니다 — 못 쓰는 도구를 세워 두면 모델은 그걸 부르고, "없습니다" 를
|
|
1298
|
+
받고, 또 부릅니다. 그 왕복이 도구 설명으로 나가는 자리보다 비쌉니다.
|
|
1299
|
+
|
|
1300
|
+
무엇이 있는지는 `/lsp` 로 봅니다.
|
|
1301
|
+
|
|
1302
|
+
```
|
|
1303
|
+
$ /lsp
|
|
1304
|
+
|
|
1305
|
+
◈ 이 PC 에 있는 언어 서버 2개
|
|
1306
|
+
✓ ts typescript-language-server
|
|
1307
|
+
✓ py pyright-langserver
|
|
1308
|
+
|
|
1309
|
+
이 폴더의 언어: py · 12개 파일
|
|
1310
|
+
도구: Def · Refs
|
|
1311
|
+
고친 뒤 진단: 켜짐
|
|
1312
|
+
고친 뒤 진단 켜고 끄기: /lsp on · /lsp off
|
|
1313
|
+
```
|
|
1314
|
+
|
|
1315
|
+
`ts` · `py` · `go` · `rs` · `java` · `cs` · `cpp` · `rb` · `php` · `lua` 를 찾습니다.
|
|
1316
|
+
없으면 깔 명령을 **글자로만** 보여 줍니다. 칠지 말지는 사람이 정합니다.
|
|
1317
|
+
|
|
1318
|
+
<details>
|
|
1319
|
+
<summary>붙이면서 진짜 서버(pyright)에게 배운 것 넷</summary>
|
|
1320
|
+
|
|
1321
|
+
흉내 서버로만 시험했으면 전부 초록이었을 것들입니다.
|
|
1322
|
+
|
|
1323
|
+
- **서버는 주소를 우리와 다르게 적습니다.** 우리는 `file:///C:/…`, pyright 은
|
|
1324
|
+
`file:///c%3A/…` — 드라이브 글자를 소문자로 쓰고 콜론을 퍼센트로 감쌉니다.
|
|
1325
|
+
글자로 견주면 영영 안 맞습니다. 진단은 제대로 오는데 표에서 못 찾아 '안 왔다' 가
|
|
1326
|
+
되고, **아무 말도 안 하는 것이 '성하다' 는 뜻이라** 틀린 것을 성하다고 말하게
|
|
1327
|
+
됩니다. 그래서 주소가 아니라 경로로 견줍니다.
|
|
1328
|
+
- **막 켠 서버는 빈손으로 답합니다.** 없어서가 아니라 아직 프로젝트를 다 못
|
|
1329
|
+
훑어서입니다. 켠 지 0.2초에 물었더니 없다고 했고 0.5초 뒤엔 나왔습니다. 이걸
|
|
1330
|
+
'없다' 로 잘라 말하면 모델은 그 말을 믿고 이미 있는 것을 새로 만듭니다. 켠 지
|
|
1331
|
+
얼마 안 됐을 때만 몇 번 더 물어봅니다.
|
|
1332
|
+
- **윈도우에서 npm 이 깐 것은 이름이 둘입니다.** 확장자 없는 sh 스크립트와 `.cmd`.
|
|
1333
|
+
앞엣것을 먼저 찾으면 파일은 분명히 있으니 '깔려 있다' 고 나오는데, 띄우면
|
|
1334
|
+
윈도우가 못 돌립니다. 있다고 해 놓고 안 되는, 제일 알아채기 어려운 꼴입니다.
|
|
1335
|
+
- **`cmd /s /c` 는 바깥 따옴표 한 쌍을 떼어 냅니다.** 한 쌍만 두르면 명령이 통째로
|
|
1336
|
+
깨지는데, 겉에서 보이는 것은 "언어 서버가 없습니다" 뿐입니다.
|
|
1337
|
+
|
|
1338
|
+
</details>
|
|
1339
|
+
|
|
1340
|
+
</details>
|
|
1341
|
+
|
|
1193
1342
|
---
|
|
1194
1343
|
|
|
1195
1344
|
## 한글 문서와 엑셀
|
|
1196
1345
|
|
|
1346
|
+
**CP949 로 저장된 파일은 CP949 로 되돌려 씁니다.** 인코딩을 바꾸지 않습니다.
|
|
1347
|
+
엑셀(`.xlsx`)은 CSV 로 바꿔서 읽습니다 — 읽기 전용입니다.
|
|
1348
|
+
|
|
1349
|
+
<details>
|
|
1350
|
+
<summary><b>자세히</b> — 인코딩 · 엑셀</summary>
|
|
1351
|
+
|
|
1197
1352
|
### 인코딩 — 읽은 그대로 되돌려 씁니다
|
|
1198
1353
|
|
|
1199
1354
|
사내 문서는 UTF-8 이 아닌 경우가 흔합니다. 윈도우 메모장이 오래 쓰던 완성형
|
|
@@ -1264,6 +1419,8 @@ utf8 로 받으면 한글이 깨집니다. 바이트로 받아서 풉니다.
|
|
|
1264
1419
|
> 서식·수식·차트가 든 파일을 CSV 로 왕복시키면 반드시 뭔가 잃기 때문입니다.
|
|
1265
1420
|
> 잃는 걸 알면서 쓰느니 안 쓰는 편이 낫습니다.
|
|
1266
1421
|
|
|
1422
|
+
</details>
|
|
1423
|
+
|
|
1267
1424
|
---
|
|
1268
1425
|
|
|
1269
1426
|
## 만든 웹을 그 자리에서 띄웁니다
|
|
@@ -1341,6 +1498,9 @@ utf8 로 받으면 한글이 깨집니다. 바이트로 받아서 풉니다.
|
|
|
1341
1498
|
|
|
1342
1499
|
Claude Code 와 같은 형식(`SKILL.md` + YAML 앞머리, `commands/*.md`, `$ARGUMENTS`)을 읽습니다.
|
|
1343
1500
|
|
|
1501
|
+
<details>
|
|
1502
|
+
<summary><b>자세히</b> — 3단계로 나눠 올립니다 · 플러그인 받아 오기 · 안 넣은 것</summary>
|
|
1503
|
+
|
|
1344
1504
|
### 3단계로 나눠 올립니다
|
|
1345
1505
|
|
|
1346
1506
|
전부 올리면 컨텍스트가 죽습니다.
|
|
@@ -1374,6 +1534,8 @@ unzip 반입.zip -d ~/.deel/plugins/
|
|
|
1374
1534
|
| 서브에이전트 | 모델 호출이 배로 늘어 게이트웨이 할당량을 먹습니다 |
|
|
1375
1535
|
| MCP | 별도 프로토콜이라 그 자체로 하나의 프로젝트입니다 |
|
|
1376
1536
|
|
|
1537
|
+
</details>
|
|
1538
|
+
|
|
1377
1539
|
---
|
|
1378
1540
|
|
|
1379
1541
|
## 추론 강도
|
|
@@ -1421,6 +1583,9 @@ $ /think 자세히
|
|
|
1421
1583
|
이 한 줄로 갈립니다. 아는 상한이 낮으면 셋이 같아지는 것이 맞습니다.
|
|
1422
1584
|
한동안 이 표는 세 줄이 늘 `16,384` 였고, 그건 표가 뜻이 없다는 뜻이었습니다.
|
|
1423
1585
|
|
|
1586
|
+
<details>
|
|
1587
|
+
<summary><b>자세히</b> — 컨텍스트 길이는 모델에서 긁어옵니다 · /out · 잘린 도구 호출</summary>
|
|
1588
|
+
|
|
1424
1589
|
### 컨텍스트 길이는 모델에서 긁어옵니다
|
|
1425
1590
|
|
|
1426
1591
|
이 숫자 하나가 프로그램 전체 크기를 정합니다. 한 번에 읽힐 수 있는 파일 수,
|
|
@@ -1555,6 +1720,8 @@ This model's maximum context length is 8192 tokens, however you requested 41003
|
|
|
1555
1720
|
'헛도는 작업' 을 구분하지 못합니다. 여기서 세는 것은 걸음 수가 아니라
|
|
1556
1721
|
**같은 도구가 같은 이유로 실패한 횟수**입니다.
|
|
1557
1722
|
|
|
1723
|
+
</details>
|
|
1724
|
+
|
|
1558
1725
|
---
|
|
1559
1726
|
|
|
1560
1727
|
## 자동 압축
|
|
@@ -1623,6 +1790,9 @@ deel 은 그걸 **코드를 안 고치고** 도구로 씁니다.
|
|
|
1623
1790
|
JSON-RPC 2.0 을 주고받는 것이 전부라, `child_process` 와 `JSON` 이면 됩니다. SDK 가
|
|
1624
1791
|
필요 없습니다.
|
|
1625
1792
|
|
|
1793
|
+
<details>
|
|
1794
|
+
<summary><b>자세히</b> — 다만 이건 남의 프로그램입니다</summary>
|
|
1795
|
+
|
|
1626
1796
|
### 다만 이건 남의 프로그램입니다
|
|
1627
1797
|
|
|
1628
1798
|
이 프로젝트가 존재하는 이유가 '미승인 SW 반입 금지' 인데, MCP 를 아무렇게나 켜면
|
|
@@ -1642,6 +1812,111 @@ JSON-RPC 2.0 을 주고받는 것이 전부라, `child_process` 와 `JSON` 이
|
|
|
1642
1812
|
조용히 빠지지 않고 머리말에 이유가 뜹니다 — 조용히 빠지면 "왜 그 도구가 없지" 를
|
|
1643
1813
|
영영 알 수 없습니다.
|
|
1644
1814
|
|
|
1815
|
+
</details>
|
|
1816
|
+
|
|
1817
|
+
---
|
|
1818
|
+
|
|
1819
|
+
## 에디터 안에서 쓰기 (ACP)
|
|
1820
|
+
|
|
1821
|
+
터미널을 하나 더 띄우게 하는 도구는 두 주쯤 뒤에 안 씁니다. 개발자는 하루 종일
|
|
1822
|
+
IDE 안에 있습니다. 그래서 **ACP**(Agent Client Protocol)를 지킵니다 — Zed ·
|
|
1823
|
+
JetBrains · Neovim · Emacs 가 **저쪽을 한 줄도 안 고치고** deel 을 붙입니다.
|
|
1824
|
+
|
|
1825
|
+
에디터 설정에 이 명령 하나만 적으면 됩니다.
|
|
1826
|
+
|
|
1827
|
+
```
|
|
1828
|
+
deel acp
|
|
1829
|
+
```
|
|
1830
|
+
|
|
1831
|
+
에디터가 이걸 자식 프로세스로 띄우고, 표준입출력으로 줄 단위 JSON-RPC 2.0 을
|
|
1832
|
+
주고받습니다. 사람이 직접 칠 명령은 아닙니다.
|
|
1833
|
+
|
|
1834
|
+
**붙으면 이렇게 됩니다.**
|
|
1835
|
+
|
|
1836
|
+
| 에디터 쪽 | deel 쪽 |
|
|
1837
|
+
|---|---|
|
|
1838
|
+
| 답이 흘러나오는 자리 | 모델이 흘리는 글 · 생각 |
|
|
1839
|
+
| 도구 목록 (아이콘·상태) | `Read` 는 읽기, `Edit` 는 고치기, `Bash` 는 실행 — **갈래를 붙여** 보냅니다 |
|
|
1840
|
+
| 파일 링크 | 고친 파일의 **절대 경로**. 눌러서 그 자리로 갑니다 |
|
|
1841
|
+
| 승인 창 | deel 의 안전망이 그대로 에디터 창으로 뜹니다 (`이번만` · `앞으로 묻지 않기` · `안 함`) |
|
|
1842
|
+
| 모드 고르개 | deel 의 작업 모드 7개 (`종합` · `코드` · `계획` · `설계` · `디버그` · `묻기` · `총괄`) |
|
|
1843
|
+
| 멈춤 단추 | 도중에 닿습니다 — 답을 기다리는 중에도 |
|
|
1844
|
+
|
|
1845
|
+
**의존성은 그대로 0 입니다.** MCP 와 같은 이유입니다 — 줄 단위 JSON-RPC 2.0 이
|
|
1846
|
+
전부라 SDK 가 필요 없습니다.
|
|
1847
|
+
|
|
1848
|
+
<details>
|
|
1849
|
+
<summary><b>자세히</b> — 조용히 깨지는 자리들</summary>
|
|
1850
|
+
|
|
1851
|
+
이 프로토콜은 깨질 때 조용히 깨집니다. 에디터는 "에이전트가 응답하지 않습니다"
|
|
1852
|
+
만 띄우고, 왜 그런지는 어디에도 안 남습니다. 그래서 다음 자리들을 검사로 못
|
|
1853
|
+
박아 두었습니다 (`test/acp.test.js` — 진짜 프로세스를 띄우고 진짜 파이프로 잽니다).
|
|
1854
|
+
|
|
1855
|
+
| 자리 | 왜 |
|
|
1856
|
+
|---|---|
|
|
1857
|
+
| **표준출력에는 ACP 말고 아무것도** | 규격이 `MUST NOT` 이라 적은 것입니다. deel 안에는 화면에 적는 자리가 수십 군데인데, 그 중 하나만 이 모드에서 불려도 관이 깨집니다. 부르는 자리를 하나씩 막는 대신 **통로 자체를 바꿔 끼웠습니다** — 앞으로 새로 쓰는 코드까지 저절로 안전합니다. 적힌 글은 버리지 않고 표준오류로 보냅니다 |
|
|
1858
|
+
| **한글이 덩이 경계에 걸칠 때** | 파이프는 글자가 아니라 바이트로 끊깁니다. 덩이마다 따로 디코딩하면 `안녕` 이 `안<?>하` 가 되는데 **JSON 은 그대로 파싱되므로 오류도 안 납니다.** 글자만 조용히 뭉개집니다 |
|
|
1859
|
+
| **`id` 가 0 인 요청** | ACP 클라이언트는 0번부터 셉니다. `if (msg.id)` 로 보면 첫 `initialize` 를 알림으로 오해하고 답을 안 보냅니다 — 붙자마자 멈춥니다 |
|
|
1860
|
+
| **취소가 도중에 닿는가** | 취소는 늘 무언가가 돌고 있는 중에 옵니다. 들어온 줄을 하나씩 기다렸다 처리하면 취소는 **영영 안 닿습니다** |
|
|
1861
|
+
| **승인을 못 물어봤을 때** | 여기서 '그냥 실행' 을 고르고 싶어집니다 — 안 그러면 승인 창을 아직 안 만든 클라이언트에서 아무것도 안 도니까. 그런데 그건 "물어볼 수 없으면 마음대로 한다" 는 뜻입니다. **안 합니다** |
|
|
1862
|
+
|
|
1863
|
+
**아직 안 하는 것도 적어 둡니다.**
|
|
1864
|
+
|
|
1865
|
+
| | |
|
|
1866
|
+
|---|---|
|
|
1867
|
+
| `session/load` | 지난 대화 되살리기. 오간 말을 전부 다시 흘려야 하는데, 반쯤 만들어 두면 에디터가 빈 대화를 열고 사용자는 기록이 날아간 줄 압니다. **`loadSession: false` 라고 분명히 말합니다** |
|
|
1868
|
+
| 그림·소리 붙임 | 로컬 모델 대부분이 못 읽습니다. 조용히 버리지 않고 "못 읽습니다" 라고 적어 모델에게 넘깁니다 |
|
|
1869
|
+
| 에디터가 넘긴 MCP 서버 | 띄우지 않습니다. 그러면 **에디터 설정에 적힌 프로세스를 deel 이 대신 띄우는** 셈이 됩니다. 반입 심사에서 제일 먼저 묻는 것이 "이 도구가 무엇을 띄우는가" 인데, 그 답이 '에디터가 시키는 대로' 가 되면 안 됩니다. `.deel/mcp.json` 에 사람이 직접 적은 것만 띄웁니다 |
|
|
1870
|
+
|
|
1871
|
+
</details>
|
|
1872
|
+
|
|
1873
|
+
---
|
|
1874
|
+
|
|
1875
|
+
## 비밀이 새지 않게
|
|
1876
|
+
|
|
1877
|
+
사람이 열쇠를 붙여 넣는 일은 드뭅니다. 새는 자리는 거의 항상 **명령 출력**입니다.
|
|
1878
|
+
|
|
1879
|
+
```
|
|
1880
|
+
env OPENAI_API_KEY=sk-proj-…
|
|
1881
|
+
git remote -v https://사람:토큰@github.com/…
|
|
1882
|
+
curl -v > Authorization: Bearer eyJ…
|
|
1883
|
+
검사 실패 로그 연결 문자열이 통째로
|
|
1884
|
+
```
|
|
1885
|
+
|
|
1886
|
+
그 글은 모델에게 실려 가고, **동시에** `.deel/sessions/*.jsonl` 로 디스크에
|
|
1887
|
+
적힙니다. 그 파일은 나중에 `/recall` 로 다시 읽히고 `deel pack` 에 딸려 갈 수도
|
|
1888
|
+
있습니다. 한 번 새면 여러 벌이 됩니다.
|
|
1889
|
+
|
|
1890
|
+
그래서 도구 결과가 대화로 들어가는 **한 자리**에서 가립니다.
|
|
1891
|
+
|
|
1892
|
+
```
|
|
1893
|
+
⏺ Bash(env | grep API) 완료
|
|
1894
|
+
⊘ 비밀로 보이는 값 2군데가 대화에 들어갔습니다 (openai · 환경변수) — 모델에 가려서 보냈습니다
|
|
1895
|
+
```
|
|
1896
|
+
|
|
1897
|
+
찾는 것: 사설키 블록 · OpenAI/Anthropic 열쇠 · GitHub 토큰 · Slack 토큰 ·
|
|
1898
|
+
AWS 키 · Google 키 · JWT · 주소에 박힌 열쇠 · `Authorization` 계열 헤더 ·
|
|
1899
|
+
이름이 `…KEY`/`…TOKEN`/`…SECRET`/`…PASSWORD` 인 환경변수. 그리고 **설정에 든
|
|
1900
|
+
게이트웨이 열쇠는 모양과 상관없이** — 그건 짐작이 아니라 아는 값이니까요.
|
|
1901
|
+
|
|
1902
|
+
### 파일 내용은 일부러 안 가립니다
|
|
1903
|
+
|
|
1904
|
+
가리고 싶은 마음이 제일 드는 자리가 `.env` 인데, 거기를 가리면 이렇게 됩니다 —
|
|
1905
|
+
모델이 가려진 글을 보고, 그걸 고쳐서 되돌려 씁니다. 그러면 진짜 열쇠가 있던
|
|
1906
|
+
자리에 `«가림»` 이 적힙니다. **비밀을 지키려다 사람의 열쇠를 우리 손으로
|
|
1907
|
+
지우는 셈입니다.**
|
|
1908
|
+
|
|
1909
|
+
그래서 파일 쪽은 가리는 대신 **알립니다.**
|
|
1910
|
+
|
|
1911
|
+
```
|
|
1912
|
+
⏺ Read(.env) 12줄
|
|
1913
|
+
! 비밀로 보이는 값 3군데가 대화에 들어갔습니다 (환경변수)
|
|
1914
|
+
— 파일 내용은 가리지 않습니다 (가리면 되돌려 쓸 때 지워집니다)
|
|
1915
|
+
```
|
|
1916
|
+
|
|
1917
|
+
무엇을 못 막는지 분명히 말하는 편이, 막았다고 해 놓고 파일을 망가뜨리는 것보다
|
|
1918
|
+
언제나 낫습니다. 어느 쪽이든 감사기록에 남습니다.
|
|
1919
|
+
|
|
1645
1920
|
---
|
|
1646
1921
|
|
|
1647
1922
|
## 안전망
|
|
@@ -1670,6 +1945,9 @@ JSON-RPC 2.0 을 주고받는 것이 전부라, `child_process` 와 `JSON` 이
|
|
|
1670
1945
|
32MB 를 넘으면 **최근 50턴만 남기고** 오래된 것을 버립니다. 방금 한 일은 언제나
|
|
1671
1946
|
되돌릴 수 있고, 지금 이력이 얼마나 되는지는 `/status` 에서 봅니다.
|
|
1672
1947
|
|
|
1948
|
+
<details>
|
|
1949
|
+
<summary><b>자세히</b> — Bash 로 사라진 것도 되돌아갑니다 · 안 읽는 자리</summary>
|
|
1950
|
+
|
|
1673
1951
|
### `Bash` 로 사라진 것도 되돌아갑니다
|
|
1674
1952
|
|
|
1675
1953
|
안전망이 `Write` · `Edit` 만 지키고 있었습니다. 그런데 모델은 파일을 옮길 때
|
|
@@ -1736,6 +2014,8 @@ JSON-RPC 2.0 을 주고받는 것이 전부라, `child_process` 와 `JSON` 이
|
|
|
1736
2014
|
반드시 옵니다 — 훑을 때는 안 걸리는데 이름을 대면 읽히는, 설명하기 어려운
|
|
1737
2015
|
상태가 됩니다.
|
|
1738
2016
|
|
|
2017
|
+
</details>
|
|
2018
|
+
|
|
1739
2019
|
---
|
|
1740
2020
|
|
|
1741
2021
|
## 사내 반입
|
|
@@ -1749,25 +2029,39 @@ deel pack --out deel-반입.zip
|
|
|
1749
2029
|
```
|
|
1750
2030
|
── 반입 묶음 ───────────────────────────────────────────────────
|
|
1751
2031
|
✓ deel-반입.zip
|
|
1752
|
-
|
|
2032
|
+
94개 파일 · 509.6KB
|
|
1753
2033
|
|
|
1754
2034
|
의존성 0개
|
|
1755
2035
|
설치 스크립트 없음
|
|
1756
2036
|
외부 import 0건
|
|
1757
2037
|
네트워크 호출 3곳 (설정한 주소로만)
|
|
1758
|
-
포트 열기
|
|
2038
|
+
포트 열기 1곳 (/preview 만)
|
|
1759
2039
|
```
|
|
1760
2040
|
|
|
1761
|
-
zip
|
|
2041
|
+
zip 안에는 **사람이 읽을 것 한 장, 기계가 읽을 것 두 장**이 같이 들어갑니다.
|
|
2042
|
+
반입 심사는 사람만 보는 절차가 아니기 때문입니다 — 보안팀은 SBOM 을 스캐너에
|
|
2043
|
+
먹여 취약점 목록을 뽑고, 운영팀은 감사 사양을 보고 SIEM 수집 규칙을 짭니다.
|
|
1762
2044
|
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
-
|
|
1767
|
-
|
|
2045
|
+
| 파일 | 무엇 |
|
|
2046
|
+
|---|---|
|
|
2047
|
+
| `반입심사서.txt` | 의존성 · 설치 스크립트 · **소스를 훑어 찾은 네트워크·외부 명령 호출 자리 전부**(파일:줄) · 나가는 길 세 갈래 · 파일별 SHA-256 |
|
|
2048
|
+
| `sbom.cdx.json` | **SBOM (CycloneDX 1.5).** 스캐너에 그대로 넣습니다. 파일마다 부품 하나에 SHA-256, 의존성은 **빈 배열로 명시** — 안 적어 낸 것과 없는 것은 다릅니다 |
|
|
2049
|
+
| `심사명세.json` | 통신 목록(갈래마다 언제·어디로·무엇이·막는법·소스 자리) · **감사기록 사양**(칸 이름과 뜻, 안 남기는 것) · 파일 해시 |
|
|
2050
|
+
|
|
2051
|
+
```bash
|
|
2052
|
+
deel audit # 사람이 읽는 심사서만 보기
|
|
2053
|
+
deel sbom # 기계가 읽는 두 장을 표준출력으로 (deel sbom | jq)
|
|
2054
|
+
deel sbom --out 심사.json # 파일로
|
|
2055
|
+
deel sbom --only sbom # SBOM 한 장만
|
|
2056
|
+
```
|
|
1768
2057
|
|
|
1769
|
-
손으로 적지 않고 코드가 소스를 훑어서 만듭니다 — 손으로 적으면 언젠가
|
|
1770
|
-
|
|
2058
|
+
셋 다 손으로 적지 않고 코드가 소스를 훑어서 만듭니다 — 손으로 적으면 언젠가
|
|
2059
|
+
사실과 어긋나고, **어긋난 심사 서류는 없느니만 못합니다.** 담당자가 한 번 틀린
|
|
2060
|
+
것을 발견하면 나머지도 안 믿습니다. 감사기록 사양만은 손으로 적혀 있어서,
|
|
2061
|
+
그것이 진짜 기록과 어긋나지 않는지를 검사가 매번 대조합니다.
|
|
2062
|
+
|
|
2063
|
+
<details>
|
|
2064
|
+
<summary><b>자세히</b> — 사내 게이트웨이 진단</summary>
|
|
1771
2065
|
|
|
1772
2066
|
### 사내 게이트웨이 진단
|
|
1773
2067
|
|
|
@@ -1792,12 +2086,17 @@ node bin/deel.js diagnose --url <게이트웨이주소> --key <키> --model <모
|
|
|
1792
2086
|
|
|
1793
2087
|
판정은 **준비됨 · 제한적 · 막힘 · 연결실패** 넷 중 하나로 나옵니다.
|
|
1794
2088
|
|
|
2089
|
+
</details>
|
|
2090
|
+
|
|
1795
2091
|
---
|
|
1796
2092
|
|
|
1797
2093
|
## 설정
|
|
1798
2094
|
|
|
1799
2095
|
`~/.deel/config.json` 에 저장됩니다. 프로젝트 폴더에 `.deel/config.json` 이 있으면 그쪽이 우선입니다.
|
|
1800
2096
|
|
|
2097
|
+
<details>
|
|
2098
|
+
<summary><b>자세히</b> — 붙는 서버 · 환경변수 · 실행 옵션 · 프로젝트 규칙</summary>
|
|
2099
|
+
|
|
1801
2100
|
### 붙는 서버
|
|
1802
2101
|
|
|
1803
2102
|
주소만 넣으면 규격을 알아서 찾습니다.
|
|
@@ -1844,6 +2143,8 @@ deel --no-tui 입력 상자를 끄고 줄 화면으로 (아래 참고
|
|
|
1844
2143
|
작업 폴더에 `DEEL.md` · `CLAUDE.md` · `AGENTS.md` 중 하나가 있으면 읽어서 규칙으로 씁니다.
|
|
1845
2144
|
`/init` 으로 틀을 만들 수 있습니다.
|
|
1846
2145
|
|
|
2146
|
+
</details>
|
|
2147
|
+
|
|
1847
2148
|
---
|
|
1848
2149
|
|
|
1849
2150
|
## 문제 해결
|
|
@@ -1922,6 +2223,9 @@ zip 은 진짜 `unzip` 으로, tar 는 진짜 `tar` 가 만든 것을 읽혀 교
|
|
|
1922
2223
|
| `no-bundle` | 12 | 배포 묶음에 남의 것이 안 섞였는가 · 검사 파일 위생 |
|
|
1923
2224
|
| `edit-bench` | 20건 | 편집 성공률 |
|
|
1924
2225
|
|
|
2226
|
+
<details>
|
|
2227
|
+
<summary><b>자세히</b> — 어디를 밟았는지 · 폴더 구조</summary>
|
|
2228
|
+
|
|
1925
2229
|
### 어디를 밟았는지
|
|
1926
2230
|
|
|
1927
2231
|
```bash
|
|
@@ -1947,40 +2251,411 @@ node test/coverage.mjs --json 기계가 읽을 형태로
|
|
|
1947
2251
|
```
|
|
1948
2252
|
bin/deel.js 진입점
|
|
1949
2253
|
src/
|
|
1950
|
-
|
|
2254
|
+
repl.js 대화 화면 — 사람이 마주하는 자리
|
|
2255
|
+
oneshot.js 한 번 돌리고 끝내기 (-p)
|
|
2256
|
+
commands.js / 명령 35종
|
|
2257
|
+
setup.js 처음 켤 때 연결 잡기
|
|
2258
|
+
config.js 설정 읽고 쓰기
|
|
2259
|
+
|
|
2260
|
+
ui/ansi.js 색 · 한글 폭 계산
|
|
1951
2261
|
ui/screen.js 화면 고르기 (줄 화면 / 상자 화면)
|
|
1952
|
-
ui/inputbox.js 맨 아래 입력 상자 —
|
|
2262
|
+
ui/inputbox.js 맨 아래 입력 상자 — 덮어 그리기·커서 자리
|
|
2263
|
+
ui/status.js 상태줄 — 모델·컨텍스트·모드·승인
|
|
1953
2264
|
ui/working.js 일하는 중 문구 — 지금 하는 일을 따라간다
|
|
2265
|
+
ui/motion.js 문구 옆에서 도는 점자 그림
|
|
1954
2266
|
ui/approve.js 승인 방식 표시 (자동/위험만/모두)
|
|
2267
|
+
ui/diff.js 고친 자리를 그 자리에서 보여 주기
|
|
1955
2268
|
ui/wrap.js 색을 지키며 폭에 맞춰 접기
|
|
2269
|
+
ui/level.js 쉬움 · 개발자
|
|
2270
|
+
|
|
1956
2271
|
agent/loop.js 에이전트 루프
|
|
1957
2272
|
agent/session.js 대화 상태 + 컨텍스트 셈
|
|
2273
|
+
agent/modes.js 작업 모드 (종합·코드·계획·설계·디버그·묻기·총괄)
|
|
2274
|
+
agent/route.js 말을 보고 알맞은 모드 고르기
|
|
1958
2275
|
agent/effort.js 단계별 추론 강도 배분
|
|
2276
|
+
agent/budget.js 창 크기에 맞춘 몫 — 읽을 줄·설명 길이·걸음 수
|
|
2277
|
+
agent/project.js 이 폴더가 무슨 프로젝트인지 읽기
|
|
1959
2278
|
agent/compact.js 요약 압축
|
|
1960
2279
|
agent/store.js 대화 저장·이어하기
|
|
1961
2280
|
agent/recall.js 지난 대화 찾기 (색인 없이, 예산 안에서)
|
|
1962
2281
|
agent/memory.js 대화가 끝나도 남는 것
|
|
2282
|
+
agent/mention.js `@파일` 붙이기
|
|
2283
|
+
|
|
1963
2284
|
backend/http.js HTTP 한 겹 (바깥으로 나가는 유일한 문)
|
|
1964
2285
|
backend/detect.js 규격·인증 자동 판별
|
|
1965
2286
|
backend/adapter.js OpenAI/Ollama 차이 흡수 + 스트리밍 파서
|
|
2287
|
+
backend/ctxsize.js 컨텍스트 길이를 모델에서 긁어오기
|
|
1966
2288
|
backend/probe.js 진단 검사 8종
|
|
1967
2289
|
backend/scan.js 로컬 서버 훑기
|
|
1968
2290
|
backend/mcp.js 밖에서 도구 붙이기 (MCP, stdio)
|
|
1969
|
-
|
|
2291
|
+
|
|
2292
|
+
tools/index.js 도구 17종
|
|
1970
2293
|
tools/edit-match.js 단계별 완화 편집 매칭
|
|
1971
|
-
tools/
|
|
2294
|
+
tools/outline.js 파일 모양만 싸게 보기
|
|
2295
|
+
tools/verify.js 만든 것 확인
|
|
2296
|
+
tools/task.js 큰 일을 떼어 따로 돌리기
|
|
2297
|
+
tools/jobs.js 뒤에서 도는 명령
|
|
1972
2298
|
tools/todo.js 할 일 목록
|
|
2299
|
+
tools/webfetch.js 웹 읽기 (읽기 전용)
|
|
2300
|
+
tools/encoding.js 읽은 인코딩 그대로 되돌려 쓰기
|
|
2301
|
+
tools/xlsx.js 엑셀 → CSV (직접 구현)
|
|
2302
|
+
tools/lsp.js Def · Refs — 언어 서버에게 묻기
|
|
2303
|
+
|
|
2304
|
+
lsp/rpc.js LSP 말틀 (Content-Length + JSON-RPC, 직접 구현)
|
|
2305
|
+
lsp/servers.js 깔린 언어 서버 찾기 (안 깔아 준다)
|
|
2306
|
+
lsp/client.js 서버 하나 띄워 놓고 주고받기 · 시한 · 정리
|
|
2307
|
+
lsp/diag.js 고친 직후 그 파일이 성한지
|
|
2308
|
+
|
|
2309
|
+
preview/serve.js 만든 웹 띄우기 (127.0.0.1 에만)
|
|
1973
2310
|
skills/discover.js 그 PC 의 스킬·명령·플러그인 찾기
|
|
1974
2311
|
plugins/manage.js 플러그인 설치·삭제·묶기
|
|
1975
2312
|
pack/zip.js ZIP 쓰기 (직접 구현, 한글 이름 보존)
|
|
1976
2313
|
pack/tar.js TAR 읽기 (직접 구현)
|
|
1977
2314
|
pack/selfpack.js 반입 심사서 + 소스 묶기
|
|
2315
|
+
|
|
1978
2316
|
safety/network.js 나가는 자리 자물쇠
|
|
1979
2317
|
safety/guard.js 작업 범위 + 위험 명령 차단
|
|
1980
2318
|
safety/undo.js 스냅샷·되돌리기
|
|
2319
|
+
safety/audit.js 무엇을 언제 했는지 남기기
|
|
1981
2320
|
test/ 검증 (배포 묶음에서 뺀다)
|
|
1982
2321
|
```
|
|
1983
2322
|
|
|
2323
|
+
</details>
|
|
2324
|
+
|
|
2325
|
+
---
|
|
2326
|
+
|
|
2327
|
+
## 릴리스 노트
|
|
2328
|
+
|
|
2329
|
+
<details>
|
|
2330
|
+
<summary><b>▸ 1.4.0 — deel 이 제 얼굴을 갖고, 영어로도 말하고, 뜻까지 본다</b> · 일곱 자리가 어떻게 바뀌었나</summary>
|
|
2331
|
+
|
|
2332
|
+
<br>
|
|
2333
|
+
|
|
2334
|
+
| | 전 | 후 |
|
|
2335
|
+
|---|---|---|
|
|
2336
|
+
| `/undo` | 파일만 되돌렸다 — 대화는 그 일이 있었다고 믿는 채로 | **대화까지** 같이 되감는다 |
|
|
2337
|
+
| 몇 분 걸리는 턴 | 화면만 보고 앉아 있어야 했다 | 종소리와 창 제목 — 다른 창에 가 있어도 안다 |
|
|
2338
|
+
| 켤 때 · 상태줄 | 어느 CLI 나 같아 보였다 | 글자가 자라는 시작 모션, 경계를 말하는 상태줄 |
|
|
2339
|
+
| 영어권 사람 | 화면이 온통 못 읽는 말이었다 | `/lang en` — 화면도 **모델이 읽는 글도** 영어로 |
|
|
2340
|
+
| 한 세션의 모델 | 하나 | 덩이마다 다른 모델 — 잔일은 작은 모델에게 |
|
|
2341
|
+
| 이름 찾기 | `Grep` 뿐 — 주석·문자열까지 섞여 나왔다 | `Def`·`Refs` — 언어 서버가 있으면 **뜻**으로 |
|
|
2342
|
+
| 고친 파일 | 돌려 봐야 성한지 알았다 | 고친 **직후에** 그 파일만 본다 |
|
|
2343
|
+
|
|
2344
|
+
<br>
|
|
2345
|
+
|
|
2346
|
+
#### 1. `/undo` 가 대화까지 되감습니다
|
|
2347
|
+
|
|
2348
|
+
파일만 되돌리면 대화는 그 일이 있었던 채로 남습니다. 모델은 방금 고쳤다고 믿고
|
|
2349
|
+
다음 걸음을 그 위에 쌓습니다 — 화면에는 아무 일도 안 일어납니다. 이제 되돌린
|
|
2350
|
+
만큼 오간 말도 같이 접습니다. 접다가 도구 호출 짝이 깨지면 서버가 400을 내므로,
|
|
2351
|
+
`repairToolPairs` 를 그대로 태워 짝을 맞춥니다.
|
|
2352
|
+
|
|
2353
|
+
#### 2. 다 됐을 때 알려 줍니다 — `/bell`
|
|
2354
|
+
|
|
2355
|
+
로컬 모델은 한 턴이 몇 분씩 갑니다. 종소리와 창 제목으로 알립니다. 종은
|
|
2356
|
+
`` 이지만 **파이프로는 한 글자도 안 흘립니다** — TTY 가 아니면 아무 데도
|
|
2357
|
+
안 씁니다. 창 제목은 ST 로 끝냅니다. BEL 로 끝내면 제목을 갱신할 때마다 종이
|
|
2358
|
+
울립니다.
|
|
2359
|
+
|
|
2360
|
+
#### 3. deel 만의 화면
|
|
2361
|
+
|
|
2362
|
+
켤 때 `deel` 에서 `deel-local` 로 글자가 자랍니다. 상태줄은 지금 어느 경계에
|
|
2363
|
+
있는지를 한 글자로 말합니다(`⌂` 이 폴더 · `↗` 밖 · `?` 모름). 애니메이션은
|
|
2364
|
+
점자와 괘선만 씁니다 — 이모지와 도형은 East Asian Ambiguous 라 폭이 자리마다
|
|
2365
|
+
달라서, 한 칸씩 밀린 화면이 됩니다.
|
|
2366
|
+
|
|
2367
|
+
#### 4·5. 영어권에서도, 그리고 모델이 읽는 글까지
|
|
2368
|
+
|
|
2369
|
+
`/lang en` 이면 화면 말이 영어로 갑니다. 안 옮긴 마디는 빈칸 대신 한국어를 그대로
|
|
2370
|
+
내고, `/lang` 이 몇 개가 남았는지 정직하게 셉니다.
|
|
2371
|
+
|
|
2372
|
+
그런데 화면만 바꾸면 모델은 계속 한국어로 답합니다 — 규칙 안에 그렇게 적혀
|
|
2373
|
+
있어서입니다. 그래서 모델이 읽는 글(뼈대 규칙·모드 지시문·도구 설명 열여섯 개)도
|
|
2374
|
+
같이 갑니다. 덤이 하나 붙습니다: 한글은 글자당 약 1토큰이고 영문은 약 3.6자당
|
|
2375
|
+
1토큰이라, 32k 창 고정 몫이 **4,910 → 3,446 토큰**으로 줄었습니다.
|
|
2376
|
+
|
|
2377
|
+
도구 이름과 인자 이름은 **안 옮깁니다.** 그건 식별자입니다.
|
|
2378
|
+
|
|
2379
|
+
#### 6. 한 세션 안에서 여러 모델 — `Task` 의 `모델`
|
|
2380
|
+
|
|
2381
|
+
8GB 램에서도 큰 모델과 작은 모델을 같이 씁니다. 잔일(형식 맞추기·되풀이 편집·
|
|
2382
|
+
짧은 요약)은 작은 모델에게 떼어 주고 판단이 필요한 것만 직접 합니다. 하위가
|
|
2383
|
+
쓰는 자리는 `allowTemporarily` 로 열고 **`finally` 에서 반드시 닫습니다** —
|
|
2384
|
+
끝나고 나면 열린 자리가 정확히 하나로 돌아옵니다.
|
|
2385
|
+
|
|
2386
|
+
#### 7. 언어 서버 — `Def` · `Refs` · 고친 뒤 진단
|
|
2387
|
+
|
|
2388
|
+
위 "언어 서버가 있으면 뜻까지 봅니다" 를 보세요. **아무것도 깔지 않습니다.**
|
|
2389
|
+
|
|
2390
|
+
</details>
|
|
2391
|
+
|
|
2392
|
+
<details>
|
|
2393
|
+
<summary><b>▸ 1.3.0 — 말 대신 증거, 터미널 대신 에디터</b> · 여섯 자리가 어떻게 바뀌었나</summary>
|
|
2394
|
+
|
|
2395
|
+
<br>
|
|
2396
|
+
|
|
2397
|
+
| | 전 | 후 |
|
|
2398
|
+
|---|---|---|
|
|
2399
|
+
| 꼭 지켜야 할 말 | 접히거나 요약되면 **사라졌다** | 프롬프트 밖에 두어 손이 못 닿는다 |
|
|
2400
|
+
| 이 모델의 버릇 | 프롬프트에 "이렇게 해라" 고 **부탁**했다 | 하네스 설정을 바꾼다 — 모델 협조가 필요 없다 |
|
|
2401
|
+
| 끝맺음 | "다 됐습니다" | 무엇을 바꿨고 무엇이 그걸 증명하나. **안 된 것도** |
|
|
2402
|
+
| 쓰는 자리 | 터미널을 하나 더 | 에디터 안에서 (Zed · JetBrains · Neovim · Emacs) |
|
|
2403
|
+
| 심사 서류 | 사람이 읽는 글 한 장 | SBOM · 통신 목록 · 감사 사양 — **스캐너에 그대로** |
|
|
2404
|
+
| 열쇠 | `env` 한 번이면 대화에도 디스크에도 남았다 | 들어가는 한 자리에서 가린다. 파일은 **일부러** 안 가린다 |
|
|
2405
|
+
|
|
2406
|
+
<br>
|
|
2407
|
+
|
|
2408
|
+
#### 1. 꼭 지켜야 할 말이 접히면서 사라지던 것 — `/pin`
|
|
2409
|
+
|
|
2410
|
+
긴 대화에서는 자리를 비우려고 앞선 말을 접거나 요약합니다. 그런데 2026년 재기로는
|
|
2411
|
+
**요약이 안전 제약을 50% 밖에 안 남깁니다.** "이 파일은 절대 건드리지 마세요" 가
|
|
2412
|
+
그 50% 에 안 들면, 모델은 그 말을 들은 적이 없는 상태가 됩니다. 화면에는 아무 일도
|
|
2413
|
+
안 일어납니다.
|
|
2414
|
+
|
|
2415
|
+
못 박은 말은 **오간 말 쪽에 안 둡니다.** 시스템 프롬프트 끝에 붙입니다 — 접기도
|
|
2416
|
+
요약도 오간 말만 만지므로, 구조적으로 손이 닿지 않습니다. 조심해서 안 지우는 것이
|
|
2417
|
+
아니라 **지울 수가 없습니다.**
|
|
2418
|
+
|
|
2419
|
+
```
|
|
2420
|
+
/pin src/legacy 폴더는 건드리지 마세요
|
|
2421
|
+
|
|
2422
|
+
✓ 못 박았습니다 — 지금 2개 (78 토큰)
|
|
2423
|
+
```
|
|
2424
|
+
|
|
2425
|
+
12개 · 240 토큰까지입니다. 넘으면 넘었다고 말하고 최근 것부터 싣습니다 — 조용히
|
|
2426
|
+
빠뜨리면 못 박은 뜻이 없어집니다.
|
|
2427
|
+
|
|
2428
|
+
#### 2. 겪어 본 버릇이 말로만 남던 것 — `/model 카드`
|
|
2429
|
+
|
|
2430
|
+
deel 은 이미 모델의 버릇을 지켜보고 있었습니다. 그런데 지켜보기만 하고 **프롬프트에
|
|
2431
|
+
적는 것**이 전부였습니다 — "인자를 자주 잘라 먹었으니 Append 를 써라" 하고. 작은
|
|
2432
|
+
모델은 그 말을 잘 안 듣습니다. 그게 작은 모델입니다.
|
|
2433
|
+
|
|
2434
|
+
이제 겪은 것이 **하네스 설정**으로 바뀝니다. 모델에게 부탁하는 대신 deel 이 제
|
|
2435
|
+
행동을 바꿉니다.
|
|
2436
|
+
|
|
2437
|
+
| 겪은 것 | 바뀌는 것 |
|
|
2438
|
+
|---|---|
|
|
2439
|
+
| 인자가 자주 잘린다 (15% 넘게) | 처음부터 상한을 높여 부릅니다 — 한 번 버리고 다시 부르지 않게 |
|
|
2440
|
+
| 같은 것을 되풀이한다 | 세 번까지 봐 주던 것을 두 번에서 끊습니다 |
|
|
2441
|
+
| 편집이 자주 빗나간다 | 빗나갔을 때 보여 주는 앞뒤 줄을 늘립니다 |
|
|
2442
|
+
|
|
2443
|
+
12걸음을 걸어 보기 전에는 **아무것도 안 바꿉니다.** 우연히 한 번 잘린 것 때문에
|
|
2444
|
+
멀쩡한 모델을 붙들어 매면 안 배우느니만 못합니다.
|
|
2445
|
+
|
|
2446
|
+
#### 3. "다 됐습니다" 대신 검토할 수 있는 것 — `/evidence`
|
|
2447
|
+
|
|
2448
|
+
2026년 조사로는 개발자의 **96%가 AI 가 쓴 코드를 온전히 믿지 않는데, 매번 확인하는
|
|
2449
|
+
사람은 48%** 입니다. 38%는 "사람 코드보다 리뷰가 더 힘들다"고 답했습니다.
|
|
2450
|
+
|
|
2451
|
+
왜 더 힘든가. 사람이 낸 코드는 "왜 이렇게 했나" 를 물으면 답이 옵니다. 에이전트가
|
|
2452
|
+
낸 코드는 **"끝났습니다" 한 줄**과 함께 옵니다. 그 한 줄은 검토할 수가 없습니다.
|
|
2453
|
+
|
|
2454
|
+
```
|
|
2455
|
+
/evidence
|
|
2456
|
+
|
|
2457
|
+
바꾼 것 3개 파일 · +142 −38
|
|
2458
|
+
돌린 것 5개 (실패 1)
|
|
2459
|
+
증명 안 된 것 1개
|
|
2460
|
+
|
|
2461
|
+
✗ src/worker.js — 마지막으로 돌린 `npm test` 가 실패했습니다 —
|
|
2462
|
+
그 앞이 통과했어도 지금 상태를 증명하지 못합니다.
|
|
2463
|
+
```
|
|
2464
|
+
|
|
2465
|
+
바꾼 것을 늘어놓는 일은 `/diff` 도 합니다. 여기서만 하는 것은 **증명 안 된 것을
|
|
2466
|
+
증명 안 됐다고 말하는 것**입니다. 셋을 거릅니다 —
|
|
2467
|
+
|
|
2468
|
+
- 고쳐 놓고 아무것도 안 돌렸으면 아무것도 증명되지 않았습니다
|
|
2469
|
+
- 검사가 빨간데 돌리기는 했다고 초록으로 치면 **빨간 검사를 증거로 내미는** 셈입니다
|
|
2470
|
+
- 고치기 **전에** 돌린 검사는 고친 것을 증명하지 못합니다 — "아까 돌렸으니 됐다" 가
|
|
2471
|
+
제일 흔한 자기기만입니다
|
|
2472
|
+
|
|
2473
|
+
빌드가 통과하고 그 **뒤에** 검사가 깨졌으면, 앞의 초록은 증거가 아닙니다. 마지막에
|
|
2474
|
+
돌린 것이 빨간데 확인됐을 리가 없습니다.
|
|
2475
|
+
|
|
2476
|
+
`/evidence 파일이름` 이면 `.deel/증거/` 아래에 마크다운으로 남깁니다. 화면은
|
|
2477
|
+
스크롤로 사라지고, 검토는 나중에 다른 사람이 합니다.
|
|
2478
|
+
|
|
2479
|
+
#### 4. 터미널을 하나 더 띄우게 하던 것 — `deel acp`
|
|
2480
|
+
|
|
2481
|
+
개발자는 하루 종일 IDE 안에 있습니다. 창을 옮겨 다녀야 하는 도구는 두 주쯤 뒤에
|
|
2482
|
+
안 씁니다. 반입 심사를 통과한 판이 아무도 안 쓰는 판이 되는 것이 제일 아까운
|
|
2483
|
+
결말입니다.
|
|
2484
|
+
|
|
2485
|
+
**ACP**(Agent Client Protocol)를 지킵니다. 에디터 설정에 `deel acp` 한 줄이면
|
|
2486
|
+
Zed · JetBrains · Neovim · Emacs 가 **저쪽을 한 줄도 안 고치고** 붙습니다.
|
|
2487
|
+
|
|
2488
|
+
붙이는 일은 관을 잇는 것이 아니라 **에디터가 무엇을 보여 줄 수 있게 하는가** 입니다.
|
|
2489
|
+
갈래·자리·상태는 안 줘도 규격에 안 걸려서, 대충 붙인 구현은 죄다 안 줍니다 —
|
|
2490
|
+
그러면 도구가 전부 똑같은 회색 점이고, 고친 파일을 눌러도 안 열립니다.
|
|
2491
|
+
|
|
2492
|
+
승인 창도 그대로 나갑니다. deel 의 안전망이 에디터 제 창으로 뜨고, "앞으로 묻지
|
|
2493
|
+
않기" 도 그 세션 동안 기억합니다. 못 물어보는 클라이언트에서는 **실행하지 않습니다** —
|
|
2494
|
+
"물어볼 수 없으면 마음대로 한다" 가 되면 안 됩니다.
|
|
2495
|
+
|
|
2496
|
+
**의존성은 그대로 0 입니다.** 줄 단위 JSON-RPC 2.0 이 전부라 SDK 가 필요 없습니다.
|
|
2497
|
+
|
|
2498
|
+
#### 5. 심사 서류가 사람만 읽을 수 있던 것 — `deel sbom`
|
|
2499
|
+
|
|
2500
|
+
2026년 4월 20일 전자금융감독규정 시행세칙 개정으로 금융권 망분리 예외가
|
|
2501
|
+
열렸습니다. 그 문 앞에서 요구되는 서류는 사람이 읽는 글이 아닙니다 — 보안팀은
|
|
2502
|
+
SBOM 을 **스캐너에 먹여** 취약점 목록을 뽑고, 운영팀은 감사 사양을 보고 SIEM
|
|
2503
|
+
수집 규칙을 짭니다.
|
|
2504
|
+
|
|
2505
|
+
이제 `deel pack` 이 세 장을 냅니다.
|
|
2506
|
+
|
|
2507
|
+
| | |
|
|
2508
|
+
|---|---|
|
|
2509
|
+
| `반입심사서.txt` | 전과 같은, 사람이 읽는 글 |
|
|
2510
|
+
| `sbom.cdx.json` | CycloneDX 1.5. 파일마다 부품 하나에 SHA-256. **의존성은 빈 배열로 명시** — 안 적어 낸 것과 없는 것은 다릅니다 |
|
|
2511
|
+
| `심사명세.json` | 통신 목록(갈래마다 언제·어디로·무엇이·막는법·소스 자리) · 감사기록 사양 · 파일 해시 |
|
|
2512
|
+
|
|
2513
|
+
셋 다 소스를 훑어 만듭니다. 감사 사양만은 손으로 적혀 있어서, **그것이 진짜
|
|
2514
|
+
기록과 어긋나지 않는지를 검사가 매번 대조합니다** — 어긋난 심사 서류는 없느니만
|
|
2515
|
+
못하고, 담당자가 한 번 틀린 것을 발견하면 나머지도 안 믿습니다.
|
|
2516
|
+
|
|
2517
|
+
#### 6. `env` 한 번이면 열쇠가 대화에도 디스크에도 남던 것
|
|
2518
|
+
|
|
2519
|
+
사람이 열쇠를 붙여 넣는 일은 드뭅니다. 새는 자리는 거의 항상 명령 출력입니다 —
|
|
2520
|
+
`env` · `git remote -v` · `curl -v` · 검사 실패 로그. 그 글은 모델에게 실려 가고,
|
|
2521
|
+
**동시에** `.deel/sessions/*.jsonl` 로 디스크에 적힙니다. 한 번 새면 여러 벌이
|
|
2522
|
+
됩니다.
|
|
2523
|
+
|
|
2524
|
+
도구 결과가 대화로 들어가는 **한 자리**에서 가립니다. 사설키 블록 · OpenAI ·
|
|
2525
|
+
Anthropic · GitHub · Slack · AWS · Google · JWT · 주소에 박힌 열쇠 ·
|
|
2526
|
+
`Authorization` 계열 헤더 · 이름이 `…KEY`/`…TOKEN`/`…SECRET`/`…PASSWORD` 인
|
|
2527
|
+
환경변수. 설정에 든 게이트웨이 열쇠는 모양과 상관없이 지웁니다 — 그건 짐작이
|
|
2528
|
+
아니라 아는 값이니까요.
|
|
2529
|
+
|
|
2530
|
+
**파일 내용은 일부러 안 가립니다.** `.env` 를 가리면 모델이 가려진 글을 보고
|
|
2531
|
+
되돌려 써서, 진짜 열쇠가 있던 자리에 표가 적힙니다 — 비밀을 지키려다 사람의
|
|
2532
|
+
열쇠를 우리 손으로 지우는 셈입니다. 그래서 파일 쪽은 가리는 대신 알립니다.
|
|
2533
|
+
|
|
2534
|
+
<br>
|
|
2535
|
+
|
|
2536
|
+
검사 2,578 → **2,860개** · 54/54 파일. 지난 판들은 [태그](https://github.com/jysvai/deel-local-cli/tags)에서 봅니다.
|
|
2537
|
+
|
|
2538
|
+
</details>
|
|
2539
|
+
|
|
2540
|
+
<details>
|
|
2541
|
+
<summary><b>▸ 1.2.0 — 대화가 끊기지 않게</b> · 여섯 자리가 어떻게 바뀌었나</summary>
|
|
2542
|
+
|
|
2543
|
+
<br>
|
|
2544
|
+
|
|
2545
|
+
| | 전 | 후 |
|
|
2546
|
+
|---|---|---|
|
|
2547
|
+
| 이어받기 | 도구를 부르다 끊긴 대화는 **다시 안 열렸다** | 짝 안 맞는 호출을 걷어내고 연다 |
|
|
2548
|
+
| 토큰 셈 | 어림잡은 채로 끝까지 갔다 | 서버 실제값에 맞춰 간다 |
|
|
2549
|
+
| 자리 비우기 | 49턴이면 요약이 왔다 | **102턴**까지 간다 |
|
|
2550
|
+
| 곁가지 | 본줄기 컨텍스트에 그대로 쌓였다 | 딴 갈래에서 |
|
|
2551
|
+
| 어제 알아낸 것 | 끄면 사라졌다 | 다음에 켤 때 넘어온다 |
|
|
2552
|
+
| 답 화면 | `**굵게**` 가 글자로 보였다 | 그려진다 |
|
|
2553
|
+
|
|
2554
|
+
<br>
|
|
2555
|
+
|
|
2556
|
+
#### 1. 도구를 부르다 끊긴 대화가 다시 안 열리던 것
|
|
2557
|
+
|
|
2558
|
+
도구를 부르던 중에 창을 닫거나 <kbd>Ctrl</kbd>+<kbd>C</kbd> 로 끊으면, 적어 둔 대화에 **부름은 있고 결과가 없는 자리**가 남습니다. 다음에 `--resume` 으로 열면 서버가 그 짝을 문제 삼아 400 을 돌려줍니다 — 대화는 멀쩡히 적혀 있는데 이어서 갈 수가 없었습니다.
|
|
2559
|
+
|
|
2560
|
+
이제 열기 전에 짝을 맞춰 봅니다. 결과 없는 부름은 버리고, 부모 없는 결과도 버리고, **모델이 한 말은 남깁니다.**
|
|
2561
|
+
|
|
2562
|
+
```
|
|
2563
|
+
$ deel --resume 20260826-140217
|
|
2564
|
+
|
|
2565
|
+
✓ 20260826-140217 — 메시지 48개를 이어 받았습니다.
|
|
2566
|
+
중단된 도구 호출 2개를 걷어냈습니다 — 그때 하던 일은 다시 시켜 주세요.
|
|
2567
|
+
```
|
|
2568
|
+
|
|
2569
|
+
#### 2. 남은 자리를 잘못 알던 것
|
|
2570
|
+
|
|
2571
|
+
토큰 수는 글자 수로 어림잡습니다. 그런데 한국어·코드·JSON 이 섞이면 그 어림이 실제와 어긋나서, 자리가 남았는데 일찍 접거나 없는데 안 접어 서버가 거절했습니다.
|
|
2572
|
+
|
|
2573
|
+
이제 서버가 답마다 알려 주는 **실제값과 견줘 배수를 고쳐 갑니다.** `/context` 맨 아래에 한 줄로 뜹니다.
|
|
2574
|
+
|
|
2575
|
+
```
|
|
2576
|
+
서버가 알려 준 실제값에 맞춰 +12% 보정했습니다 (7번 재봄).
|
|
2577
|
+
```
|
|
2578
|
+
|
|
2579
|
+
이 배수는 모델별로 남아서 **다음에 켤 때 그 값으로 시작합니다.** 처음부터 다시 재지 않습니다.
|
|
2580
|
+
|
|
2581
|
+
#### 3. 요약이 너무 일찍 오던 것
|
|
2582
|
+
|
|
2583
|
+
창의 80% 가 차면 앞 대화를 요약으로 접습니다. 요약은 **되돌릴 수 없고**, 판단의 근거였던 파일 내용이 통째로 사라집니다.
|
|
2584
|
+
|
|
2585
|
+
그 전에 한 단계를 넣었습니다. 55% 에서 **오래된 도구 결과만** 먼저 접습니다 — 최근 4개는 안 건드립니다. 모델이 한 말과 사람이 한 말도 하나도 안 건드립니다.
|
|
2586
|
+
|
|
2587
|
+
```
|
|
2588
|
+
◲ 오래된 도구 결과 6개를 접었습니다 (2,148 토큰을 비움)
|
|
2589
|
+
```
|
|
2590
|
+
|
|
2591
|
+
접힌 자리에는 무엇이었는지가 남습니다.
|
|
2592
|
+
|
|
2593
|
+
```
|
|
2594
|
+
(접힘) Read(src/runner.js) — 61줄. 자리를 비우려고 내용을 접었습니다. 필요하면 다시 읽으세요.
|
|
2595
|
+
```
|
|
2596
|
+
|
|
2597
|
+
같은 대화를 흘려보내며 재 봤습니다 — 요약이 오는 시점이 **49턴 → 102턴, 2.1배** 늦춰집니다.
|
|
2598
|
+
|
|
2599
|
+
#### 4. 곁가지가 본줄기를 더럽히던 것
|
|
2600
|
+
|
|
2601
|
+
"이것만 잠깐 봐 줘" 한 마디가 본줄기 컨텍스트에 그대로 쌓입니다. 확인이 끝나도 그 말은 안 없어집니다.
|
|
2602
|
+
|
|
2603
|
+
```
|
|
2604
|
+
/thread new 로그확인
|
|
2605
|
+
⑂ 로그확인 갈래로 왔습니다. 빈 대화입니다
|
|
2606
|
+
본줄기로 돌아가려면 /thread 1
|
|
2607
|
+
```
|
|
2608
|
+
|
|
2609
|
+
`fork` 로 갈라 나오면 여기까지 오간 말을 물려받습니다. 갈래끼리 **나뉘는 것은 오간 말·토큰·할 일**이고, **같이 쓰는 것은 연결·되돌리기·감사기록**입니다 — 갈래에서 고친 파일도 `/undo` 로 그대로 되돌아갑니다. 갈래가 둘 이상일 때만 상태줄에 `⑂` 가 뜹니다.
|
|
2610
|
+
|
|
2611
|
+
#### 5. 어제 알아낸 것이 오늘 또 사라지던 것
|
|
2612
|
+
|
|
2613
|
+
`pnpm` 이 이 PC 에 없다는 걸 알아내도 끄면 사라졌습니다. 내일 또 부르고, 또 실패하고, 또 우회합니다.
|
|
2614
|
+
|
|
2615
|
+
```
|
|
2616
|
+
/learned
|
|
2617
|
+
── 겪어 본 것 ──────────────────────────────────────
|
|
2618
|
+
|
|
2619
|
+
이 폴더에서 돌려 본 명령
|
|
2620
|
+
✓ npm test 됨 12 · 안 됨 0
|
|
2621
|
+
✗ pnpm 됨 0 · 안 됨 3
|
|
2622
|
+
|
|
2623
|
+
이 모델에 대해 qwen2.5-coder:7b
|
|
2624
|
+
같이 걸어 본 걸음 86
|
|
2625
|
+
인자가 잘림 14 (16%)
|
|
2626
|
+
토큰 추정 보정 ×1.12
|
|
2627
|
+
|
|
2628
|
+
이 중 프롬프트에 실리는 것
|
|
2629
|
+
- 여기서 되는 명령: `npm test`
|
|
2630
|
+
- 이 PC 에서 안 되는 명령(다시 부르지 마라): `pnpm`
|
|
2631
|
+
```
|
|
2632
|
+
|
|
2633
|
+
**학습이 아닙니다.** 모델을 고치지도, 대화를 쌓아 두지도 않습니다 — 그러면 컨텍스트만 먹습니다. 세어 두기만 하고, **두 번 이상 겪은 것만**, 다 합쳐 **220토큰 안에서** 넘깁니다. 한 번 겪은 것은 우연일 수 있고, 우연을 사실처럼 적으면 모델이 되는 길을 두고 우회합니다.
|
|
2634
|
+
|
|
2635
|
+
되는 명령은 폴더(`.deel/배운것.json`)에, 모델 버릇은 설정 폴더에 따로 둡니다. 그래서 **폴더를 옮겨도 모델에 대해 알아낸 것은 따라옵니다.** `/learned 지우기` 로 언제든 비웁니다.
|
|
2636
|
+
|
|
2637
|
+
#### 6. 답이 글자 그대로 보이던 것
|
|
2638
|
+
|
|
2639
|
+
모델은 마크다운으로 말하는데 화면은 그걸 몰라서, 별표와 백틱과 우물정자가 글에 섞여 나왔습니다. 무엇이 제목이고 무엇이 코드인지 사람이 머릿속에서 다시 읽어야 했습니다.
|
|
2640
|
+
|
|
2641
|
+
```
|
|
2642
|
+
전 후
|
|
2643
|
+
▌ ## 고친 것 ▌ ▍ 고친 것
|
|
2644
|
+
▌ **src/runner.js** 의 `console.log` ▌ src/runner.js 의 console.log
|
|
2645
|
+
▌ - [ ] 남은 것: `src/worker.js` ▌ ☐ 남은 것: src/worker.js
|
|
2646
|
+
▌ ```js ▌ ┌──────────────── js
|
|
2647
|
+
▌ log.info('시작', { id }) ▌ │ log.info('시작', { id })
|
|
2648
|
+
▌ |---|---| ▌ ┼────────┼─────────┼
|
|
2649
|
+
```
|
|
2650
|
+
|
|
2651
|
+
답은 토막토막 흘러오므로 **줄이 끝나야** 그릴 수 있습니다. 그런데 문단 하나가 통째로 한 줄이면 몇 초 동안 화면이 멈춘 것처럼 보입니다 — 그래서 한 줄이 화면 폭을 넘게 길어지면 거기까지를 **날것 그대로 흘려보냅니다.** 모양보다 '살아 있다' 가 먼저입니다.
|
|
2652
|
+
|
|
2653
|
+
<br>
|
|
2654
|
+
|
|
2655
|
+
검사 2,532 → **2,578개** · 48/48 파일. 지난 판들은 [태그](https://github.com/jysvai/deel-local-cli/tags)에서 봅니다.
|
|
2656
|
+
|
|
2657
|
+
</details>
|
|
2658
|
+
|
|
1984
2659
|
---
|
|
1985
2660
|
|
|
1986
2661
|
## 라이선스
|