deel-local-cli 1.13.0 → 1.14.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 (54) hide show
  1. package/README.ko.md +32 -26
  2. package/README.md +32 -26
  3. package/bin/deel.js +6 -1
  4. package/package.json +3 -2
  5. package/src/acp/map.js +367 -367
  6. package/src/acp/serve.js +830 -810
  7. package/src/agent/budget.js +156 -156
  8. package/src/agent/commit.js +534 -534
  9. package/src/agent/compact.js +441 -441
  10. package/src/agent/effort.js +308 -308
  11. package/src/agent/evolve.js +263 -263
  12. package/src/agent/loop.js +1755 -1728
  13. package/src/agent/memory.js +156 -156
  14. package/src/agent/mention.js +210 -210
  15. package/src/agent/recall.js +222 -222
  16. package/src/agent/session.js +1056 -1056
  17. package/src/backend/adapter.js +1355 -1355
  18. package/src/backend/cachemark.js +223 -223
  19. package/src/backend/detect.js +327 -327
  20. package/src/backend/http.js +460 -460
  21. package/src/backend/mcp.js +407 -407
  22. package/src/backend/price.js +260 -260
  23. package/src/backend/probe.js +487 -487
  24. package/src/backend/quota.js +274 -274
  25. package/src/backend/tokens.js +59 -59
  26. package/src/backend/toolfit.js +352 -352
  27. package/src/backend/wire.js +715 -715
  28. package/src/cmdnames.js +68 -0
  29. package/src/commands.js +3116 -3184
  30. package/src/config.js +283 -283
  31. package/src/i18n/en.js +545 -545
  32. package/src/i18n/ja.js +498 -498
  33. package/src/i18n/ko.js +592 -592
  34. package/src/i18n/zh.js +498 -498
  35. package/src/oneshot.js +685 -625
  36. package/src/pack/selfpack.js +15 -2
  37. package/src/pack/sheet.en.js +16 -2
  38. package/src/pack/tar.js +154 -154
  39. package/src/pack/zip.js +235 -235
  40. package/src/plugins/manage.js +416 -416
  41. package/src/repl.js +2616 -2616
  42. package/src/safety/audit.js +148 -148
  43. package/src/safety/guard.js +714 -641
  44. package/src/safety/network.js +200 -200
  45. package/src/tools/fastgrep.js +229 -229
  46. package/src/tools/fsutil.js +312 -291
  47. package/src/tools/index.js +2590 -2560
  48. package/src/tools/jobs.js +876 -876
  49. package/src/tools/spawn.js +213 -213
  50. package/src/tools/verify.js +358 -358
  51. package/src/tools/webfetch.js +418 -418
  52. package/src/ui/export.js +233 -233
  53. package/src/ui/pick.js +115 -115
  54. package/src/ui/status.js +617 -617
package/README.ko.md CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  [![Node.js CI](https://img.shields.io/github/actions/workflow/status/jysvai/deel-local-cli/test.yml?branch=main&logo=github&logoColor=white&label=Node.js%20CI)](https://github.com/jysvai/deel-local-cli/actions/workflows/test.yml)
22
22
  [![CodeQL](https://img.shields.io/github/actions/workflow/status/jysvai/deel-local-cli/codeql.yml?branch=main&logo=github&logoColor=white&label=CodeQL)](https://github.com/jysvai/deel-local-cli/actions/workflows/codeql.yml)
23
- [![tests](https://img.shields.io/badge/tests-7%2C041%20passing-1a7f37?logo=checkmarx&logoColor=white)](docs/ko/develop.md)
23
+ [![tests](https://img.shields.io/badge/tests-7%2C095%20passing-1a7f37?logo=checkmarx&logoColor=white)](docs/ko/develop.md)
24
24
 
25
25
  [![dependencies](https://img.shields.io/badge/dependencies-0-1a7f37)](https://www.npmjs.com/package/deel-local-cli?activeTab=dependencies)
26
26
  [![ESM](https://img.shields.io/badge/ESM-Node%2020%2B-5FA04E?logo=javascript&logoColor=white)](package.json)
@@ -94,7 +94,7 @@
94
94
  | [속도와 씀씀이](docs/ko/tuning.md) | 단계별 추론 강도 · 프리픽스 캐시 · 컨텍스트 길이 |
95
95
  | [안전망과 사내 반입](docs/ko/safety.md) | 되돌리기 · 작업 범위 · 감사기록 · 심사 서류 |
96
96
  | [설정](docs/ko/config.md) · [개발](docs/ko/develop.md) | 환경변수 · 실행 옵션 · 검사 돌리기 · 폴더 구조 |
97
- | [릴리스 노트](docs/ko/releases.md) | [1.13.x](docs/ko/releases/1.13.md) · [1.12.x](docs/ko/releases/1.12.md) · [1.10.x](docs/ko/releases/1.10.md) · [1.9.x](docs/ko/releases/1.9.md) · [그 앞](docs/ko/releases.md) |
97
+ | [릴리스 노트](docs/ko/releases.md) | [1.14.x](docs/ko/releases/1.14.md) · [1.13.x](docs/ko/releases/1.13.md) · [1.12.x](docs/ko/releases/1.12.md) · [1.10.x](docs/ko/releases/1.10.md) · [1.9.x](docs/ko/releases/1.9.md) · [그 앞](docs/ko/releases.md) |
98
98
 
99
99
  ---
100
100
 
@@ -267,7 +267,7 @@ deel --offline
267
267
  무엇이 어디로 갈 수 있는지는 켤 때 화면 맨 위에 늘 적혀 있습니다.
268
268
 
269
269
  ```
270
- deel 1.13.0 ⌂ 이 안
270
+ deel 1.14.0 ⌂ 이 안
271
271
  보냄 이 컴퓨터 안 127.0.0.1:11434 ← 여기 말고는 어디로도 안 갑니다
272
272
  ```
273
273
 
@@ -292,7 +292,7 @@ deel --offline
292
292
  수집·전송하는 것이 없습니다. 텔레메트리, 사용 통계, 오류 보고 전부 없습니다.
293
293
  대화 기록·되돌리기 이력·설정은 작업 폴더의 `.deel/` 안에만 남습니다.
294
294
 
295
- > 검증: `npm test` 의 network·web·mcp 검사 159항목. 허용되지 않은 서버에 실제로
295
+ > 검증: `npm test` 의 network·web·mcp 검사 186항목. 허용되지 않은 서버에 실제로
296
296
  > 요청이 **한 건도 닿지 않는지**, `--offline` 일 때 MCP 서버가 **한 번도 안
297
297
  > 뜨는지**까지 진짜 서버를 띄워서 확인합니다.
298
298
 
@@ -457,7 +457,7 @@ LM Studio 는 `/api/v0/models`, llama.cpp 는 `/props`. 못 알아보면 `(추
457
457
  |---|---|
458
458
  | `/help` | 명령 목록 |
459
459
  | `/bell [on|off]` | 다 됐을 때·물어볼 때 종소리와 창 제목 |
460
- | `/lang [ko|en|ja|zh] [시킬말]` | 화면 말 (한국어·English·日本語·中文 네 가지). 네 가지 다 채워져 있고, 그 말이 참인지를 **켜서 읽는 검사**가 지킨다 — 일곱 화면을 영어로 띄워 한글이 한 자라도 나오면 빨개진다(`test/langleak.test.js`). 「표는 100% 인데 화면에는 한국어」 를 여기서 한 번 겪었기 때문이다. **시킬 말을 따로 줄 수 있다** — `/lang ko en` 이면 모델에게는 영어로 시키고 답은 한국어로 받는다(8k 창에서 고정 몫 23% 감소). 코드는 그대로 |
460
+ | `/lang [ko|en|ja|zh] [시킬말]` | 화면 말 (한국어·English·日本語·中文 네 가지). 네 가지 다 채워져 있고, 그 말이 참인지를 **켜서 읽는 검사**가 지킨다 — 화면(채팅 안 여섯 · argv 로만 닿는 넷)을 영어로 띄워 한글이 한 자라도 나오면 빨개진다(`test/langleak.test.js`). 채팅창 밖 넷은 아직 한국어가 남아 있어, 0 이 아니라 **줄어들기만 하는 수**로 못박아 두었다. 「표는 100% 인데 화면에는 한국어」 를 여기서 한 번 겪었기 때문이다. **시킬 말을 따로 줄 수 있다** — `/lang ko en` 이면 모델에게는 영어로 시키고 답은 한국어로 받는다(8k 창에서 고정 몫 23% 감소). 코드는 그대로 |
461
461
  | `/keys` | 이 터미널이 무슨 키를 보내는지 눌러서 확인 — 줄바꿈이 안 될 때 |
462
462
  | `/consult <프로필> <질문>` | 다른 모델에게 한 번 물어보기 — 지금 쓰는 것은 안 바꿈 |
463
463
  | `/export` | 이 대화를 **보고서 한 장**(HTML)으로 — 시킨 것·바뀐 것·확인한 것. 폐쇄망에서 여는 자기완결 파일 |
@@ -1087,12 +1087,13 @@ deel sbom --only sbom # SBOM 한 장만
1087
1087
  ## 개발
1088
1088
 
1089
1089
  ```bash
1090
- npm test 전체 검증 (5,890항목 안팎 — 몇몇은 터미널에 따라 갈립니다)
1090
+ npm test 전체 검증 (7,095항목 — 몇몇은 터미널에 따라 갈립니다)
1091
1091
  npm run coverage 검사가 소스의 어디를 밟았는지
1092
1092
  npm run verify 반입·통신 검증만
1093
1093
  npm run bench 편집 성공률 측정
1094
1094
  npm run demo 화면이 어떻게 보이는지 실제로 돌려 보기
1095
- npm run check 전 파일 문법 검사
1095
+ npm run check 전 파일 문법 검사 · 배포에 담길 줄바꿈
1096
+ npm run mutate 검사가 정말 지키는지 되재기 (일부러 어긋내 본다)
1096
1097
  ```
1097
1098
 
1098
1099
  검증은 **가짜 게이트웨이**를 띄워서 합니다. 실제 모델 없이 규격 그대로
@@ -1120,27 +1121,30 @@ zip 은 진짜 `unzip` 으로, tar 는 진짜 `tar` 가 만든 것을 읽혀 교
1120
1121
 
1121
1122
  | 검증 | 항목 | 무엇을 |
1122
1123
  |---|---|---|
1123
- | `smoke` | 20 | 도구·작업범위·되돌리기·감사로그 |
1124
- | `loop` | 16 | 에이전트 루프·스트리밍·도구 호출 |
1125
- | `guard` | 24 | **안 하는 자리** — 거부·모르는 도구·두 번 실행·범위 |
1126
- | `network` | 30 | 정해진 자리 밖으로 새지 않는가 |
1127
- | `web` | 25 | 웹 읽기가 읽기만 하는가 |
1128
- | `abort` · `steer` | 16 · 15 | Ctrl+C 로 끊어도 대화가 성한가 · 도중에 낀 말이 다음 부름에 실리는가 |
1124
+ | `smoke` | 24 | 도구·작업범위·되돌리기·감사로그 |
1125
+ | `loop` | 28 | 에이전트 루프·스트리밍·도구 호출 |
1126
+ | `guard` | 113 | **안 하는 자리** — 거부·모르는 도구·두 번 실행·범위 밖·`.deel` 울타리 |
1127
+ | `network` | 70 | 정해진 자리 밖으로 새지 않는가 |
1128
+ | `web` | 56 | 웹 읽기가 읽기만 하는가 |
1129
+ | `abort` · `steer` | 22 · 15 | Ctrl+C 로 끊어도 대화가 성한가 · 도중에 낀 말이 다음 부름에 실리는가 |
1129
1130
  | `parallel` | 23 | 읽기만 동시에 도는가 · 할 일 목록 |
1130
- | `cli` | 75 | **진짜 `deel` 을 띄워** 끝까지 돌려 본다 |
1131
- | `setup` | 42 | 첫 실행 마법사 (가짜 TTY 로 사람처럼 입력) |
1132
- | `detect` | 66 | 주소 한 줄로 규격·인증을 짚어내는가 |
1133
- | `modes` · `route` | 89 · 33 | 작업 모드 · 종합에서 알맞은 모드로 옮겨 가는가 |
1134
- | `ctxsize` | 43 | 모델에 걸린 컨텍스트 길이를 긁어오는가 |
1135
- | `commands` · `commands-more` | 128 · 62 | 슬래시 명령 전부 |
1136
- | `ui` · `ui2` | 60 · 40 | 암호 가림·한글 폭·상태줄·대화 목록·엑셀→글 |
1137
- | `encoding` · `xlsx` | 68 · 72 | 한글 인코딩 판별 · 엑셀 읽기 |
1138
- | `compact` | 21 | 요약 압축·짝 안 깨짐·실패 시 물러섬 |
1139
- | `store` | 34 | 대화 저장·이어하기·중간에 죽어도 복구 |
1140
- | `scan` | 29 | 여러 런타임을 구분해 찾는가 |
1141
- | `plugins` | 38 | 플러그인 받기·묶기·ZIP/TAR |
1142
- | `no-bundle` | 12 | 배포 묶음에 남의 것이 안 섞였는가 · 검사 파일 위생 |
1131
+ | `cli` · `oneshot` | 84 · 82 | **진짜 `deel` 을 띄워** 끝까지 돌려 본다 · 배치 모드와 종료코드 |
1132
+ | `setup` | 60 | 첫 실행 마법사 (가짜 TTY 로 사람처럼 입력) |
1133
+ | `detect` | 85 | 주소 한 줄로 규격·인증을 짚어내는가 |
1134
+ | `modes` · `route` | 120 · 72 | 작업 모드 · 종합에서 알맞은 모드로 옮겨 가는가 |
1135
+ | `ctxsize` | 56 | 모델에 걸린 컨텍스트 길이를 긁어오는가 |
1136
+ | `commands` · `commands-more` | 214 · 93 | 슬래시 명령 전부 |
1137
+ | `ui` · `ui2` | 89 · 40 | 암호 가림·한글 폭·상태줄·대화 목록·엑셀→글 |
1138
+ | `encoding` · `xlsx` | 70 · 72 | 한글 인코딩 판별 · 엑셀 읽기 |
1139
+ | `compact` | 98 | 요약 압축·짝 안 깨짐·실패 시 물러섬 |
1140
+ | `stuck` · `undo` | 48 · 54 | 헛도는 것과 일이 되는 것을 가르는가 · 셸이 쓴 파일도 되돌려지는가 |
1141
+ | `store` | 75 | 대화 저장·이어하기·중간에 죽어도 복구 |
1142
+ | `scan` | 30 | 여러 런타임을 구분해 찾는가 |
1143
+ | `plugins` | 79 | 플러그인 받기·묶기·ZIP/TAR |
1144
+ | `exitcode` · `doorparity` | 7 · 7 | 화면에 적은 종료코드 표가 진짜인가 · 문 세 개가 같은 것을 주는가 |
1145
+ | `no-bundle` | 21 | 배포 묶음에 남의 것이 안 섞였는가 · 검사 파일 위생 |
1143
1146
  | `edit-bench` | 20건 | 편집 성공률 |
1147
+ | `mutate` | 어긋 7개 | **검사가 정말 지키는가** — 지켜야 할 줄을 일부러 어긋내고 빨개지는지 본다 |
1144
1148
 
1145
1149
  > **자세히** — 어디를 밟았는지 · 폴더 구조
1146
1150
  >
@@ -1152,6 +1156,8 @@ zip 은 진짜 `unzip` 으로, tar 는 진짜 `tar` 가 만든 것을 읽혀 교
1152
1156
 
1153
1157
  | 판 | 무엇이 바뀌었나 |
1154
1158
  |---|---|
1159
+ | **[1.14.0](docs/ko/releases/1.14.md#1140)** | 적어 둔 것이 참인지 기계가 대신 봅니다 — 초록불과 「깨면 잡힌다」 는 다릅니다 |
1160
+ | [1.13.1](docs/ko/releases/1.13.md#1131) | 올라간 물건이 소스와 달랐습니다 — 148개 중 47개가 CRLF 로 나갔습니다 |
1155
1161
  | **[1.13.0](docs/ko/releases/1.13.md#1130)** | 바깥 창구와 붙는 자리를 전부 다시 봤습니다 — 서로 못 보는 검수자 셋, 셋이 같이 짚은 것 넷 |
1156
1162
  | **[1.12.0](docs/ko/releases/1.12.md#1120)** | 같은 앞머리를 걸음마다 다시 보내고 있었습니다 |
1157
1163
  | **[1.10.0](docs/ko/releases/1.10.md#1100)** | ESC 가 진짜로 멈춥니다 · 자리가 다 차도 그 턴 안에서 이어 갑니다 · 회사별 창구를 여덟 자리 전부 쟀습니다 |
package/README.md CHANGED
@@ -20,7 +20,7 @@ Vendor APIs connect too — **only when you say so**
20
20
 
21
21
  [![Node.js CI](https://img.shields.io/github/actions/workflow/status/jysvai/deel-local-cli/test.yml?branch=main&logo=github&logoColor=white&label=Node.js%20CI)](https://github.com/jysvai/deel-local-cli/actions/workflows/test.yml)
22
22
  [![CodeQL](https://img.shields.io/github/actions/workflow/status/jysvai/deel-local-cli/codeql.yml?branch=main&logo=github&logoColor=white&label=CodeQL)](https://github.com/jysvai/deel-local-cli/actions/workflows/codeql.yml)
23
- [![tests](https://img.shields.io/badge/tests-7%2C041%20passing-1a7f37?logo=checkmarx&logoColor=white)](docs/en/develop.md)
23
+ [![tests](https://img.shields.io/badge/tests-7%2C095%20passing-1a7f37?logo=checkmarx&logoColor=white)](docs/en/develop.md)
24
24
 
25
25
  [![dependencies](https://img.shields.io/badge/dependencies-0-1a7f37)](https://www.npmjs.com/package/deel-local-cli?activeTab=dependencies)
26
26
  [![ESM](https://img.shields.io/badge/ESM-Node%2020%2B-5FA04E?logo=javascript&logoColor=white)](package.json)
@@ -119,7 +119,7 @@ This page is the **summary**. Each section links to the detail behind it.
119
119
  | [Speed and spend](docs/en/tuning.md) | Per-stage effort · the prefix cache · context length |
120
120
  | [Safety and corporate review](docs/en/safety.md) | Undo · working scope · audit log · the review package |
121
121
  | [Configuration](docs/en/config.md) · [Development](docs/en/develop.md) | Env vars · run flags · running the tests · folder layout |
122
- | [Release notes](docs/en/releases.md) | [1.13.x](docs/en/releases/1.13.md) · [1.12.x](docs/en/releases/1.12.md) · [1.10.x](docs/en/releases/1.10.md) · [1.9.x](docs/en/releases/1.9.md) · [older](docs/en/releases.md) |
122
+ | [Release notes](docs/en/releases.md) | [1.14.x](docs/en/releases/1.14.md) · [1.13.x](docs/en/releases/1.13.md) · [1.12.x](docs/en/releases/1.12.md) · [1.10.x](docs/en/releases/1.10.md) · [1.9.x](docs/en/releases/1.9.md) · [older](docs/en/releases.md) |
123
123
 
124
124
  ---
125
125
 
@@ -235,8 +235,9 @@ What you see on screen does not have to. Four screen languages ship: **한국어
235
235
  > **How this is kept honest:** `/lang` counting the table is not enough — it can only count
236
236
  > strings that made it *into* the table, and for a long time the tool result summaries and the
237
237
  > thinking indicator never did. So a test starts deel in each language and reads the screen:
238
- > `test/langleak.test.js` walks seven screens and fails if a Korean character shows up on an
239
- > English one. It also fails on `1 files`, and on a stray `·` left dangling at the end of a line.
238
+ > `test/langleak.test.js` starts deel on ten screens six inside the chat REPL and four that
239
+ > argv reaches on its own (`--help`, `status`, `sessions`, `reset`) and fails if a Korean
240
+ > character shows up on an English one. It also fails on `1 files`, and on a stray `·` left dangling at the end of a line.
240
241
 
241
242
  ```bash
242
243
  DEEL_LANG=en deel # this run only (also ja, zh)
@@ -337,7 +338,7 @@ deel --offline
337
338
  The destination is printed at the top of every session:
338
339
 
339
340
  ```
340
- deel 1.13.0 ⌂ inside
341
+ deel 1.14.0 ⌂ inside
341
342
  Sends to this machine 127.0.0.1:11434 ← nowhere else
342
343
  ```
343
344
 
@@ -363,7 +364,7 @@ leaves the company."
363
364
  Nothing is collected or transmitted. No telemetry, no usage stats, no crash reporting.
364
365
  Conversation history, undo snapshots and config live only in `.deel/` inside your working folder.
365
366
 
366
- > Verified by 159 checks in `npm test` (network + web + mcp), including bringing up a real
367
+ > Verified by 186 checks in `npm test` (network + web + mcp), including bringing up a real
367
368
  > server and confirming that **not a single request reaches it** when it is not allow-listed,
368
369
  > and that an MCP server **never starts** under `--offline`.
369
370
 
@@ -1157,7 +1158,7 @@ Stored in `~/.deel/config.json`. A `.deel/config.json` in the project folder tak
1157
1158
  ## Development
1158
1159
 
1159
1160
  ```bash
1160
- npm test Full suite (~5,890 checks; a few are TTY-dependent)
1161
+ npm test Full suite (7,095 checks; a few are TTY-dependent)
1161
1162
  npm run coverage Which lines the tests actually execute
1162
1163
  npm run verify Import + network checks only
1163
1164
  npm run bench Edit success rate
@@ -1177,27 +1178,30 @@ so one run tells you everything.
1177
1178
 
1178
1179
  | Suite | Checks | Covers |
1179
1180
  |---|---|---|
1180
- | `smoke` | 20 | Tools, scope, undo, audit log |
1181
- | `loop` | 16 | Agent loop, streaming, tool calls |
1182
- | `guard` | 24 | **What it refuses to do** — denied edits, unknown tools, repeated mutations, out-of-scope writes |
1183
- | `network` | 30 | Nothing escapes the configured address |
1184
- | `web` | 25 | Web reads stay read-only |
1185
- | `abort` · `steer` | 16 · 15 | Ctrl+C leaves the conversation valid · a line typed mid-turn rides the next call |
1181
+ | `smoke` | 24 | Tools, scope, undo, audit log |
1182
+ | `loop` | 28 | Agent loop, streaming, tool calls |
1183
+ | `guard` | 113 | **What it refuses to do** — denied edits, unknown tools, repeated mutations, out-of-scope writes, the `.deel` fence |
1184
+ | `network` | 70 | Nothing escapes the configured address |
1185
+ | `web` | 56 | Web reads stay read-only |
1186
+ | `abort` · `steer` | 22 · 15 | Ctrl+C leaves the conversation valid · a line typed mid-turn rides the next call |
1186
1187
  | `parallel` | 23 | Read-only tools run together; checklists |
1187
- | `cli` | 75 | **Spawns the real `deel`** and drives it to completion |
1188
- | `setup` | 42 | First-run wizard, driven through a fake TTY |
1189
- | `detect` | 66 | Identifying shape and auth from one address |
1190
- | `modes` · `route` | 89 · 33 | Work modes; auto-switching from Auto |
1191
- | `ctxsize` | 43 | Reading context length off the model |
1192
- | `commands` · `commands-more` | 128 · 62 | Every slash command |
1193
- | `ui` · `ui2` | 60 · 40 | Password masking, CJK width, status line, session list, Excel→text |
1194
- | `encoding` · `xlsx` | 68 · 72 | Legacy-encoding detection; Excel reading |
1195
- | `compact` | 21 | Summary folding, pairing intact, graceful fallback |
1196
- | `store` | 34 | Session persistence, resume, crash recovery |
1197
- | `scan` | 29 | Distinguishing multiple runtimes |
1198
- | `plugins` | 38 | Plugin fetch/pack, ZIP/TAR |
1199
- | `no-bundle` | 12 | Nothing foreign in the published package; test-file hygiene |
1188
+ | `cli` · `oneshot` | 84 · 82 | **Spawns the real `deel`** and drives it to completion · batch mode and exit codes |
1189
+ | `setup` | 60 | First-run wizard, driven through a fake TTY |
1190
+ | `detect` | 85 | Identifying shape and auth from one address |
1191
+ | `modes` · `route` | 120 · 72 | Work modes; auto-switching from Auto |
1192
+ | `ctxsize` | 56 | Reading context length off the model |
1193
+ | `commands` · `commands-more` | 214 · 93 | Every slash command |
1194
+ | `ui` · `ui2` | 89 · 40 | Password masking, CJK width, status line, session list, Excel→text |
1195
+ | `encoding` · `xlsx` | 70 · 72 | Legacy-encoding detection; Excel reading |
1196
+ | `compact` | 98 | Summary folding, pairing intact, graceful fallback |
1197
+ | `stuck` · `undo` | 48 · 54 | Telling spinning apart from real progress · shell-written files are undoable too |
1198
+ | `store` | 75 | Session persistence, resume, crash recovery |
1199
+ | `scan` | 30 | Distinguishing multiple runtimes |
1200
+ | `plugins` | 79 | Plugin fetch/pack, ZIP/TAR |
1201
+ | `exitcode` · `doorparity` | 7 · 7 | The printed exit-code table is real · all three doors hand out the same thing |
1202
+ | `no-bundle` | 21 | Nothing foreign in the published package; test-file hygiene |
1200
1203
  | `edit-bench` | 20 cases | Edit success rate |
1204
+ | `mutate` | 7 mutants | **Whether the tests actually guard** — break the line on purpose, check it turns red |
1201
1205
 
1202
1206
  > **More** — Coverage · Layout
1203
1207
  >
@@ -1209,6 +1213,8 @@ so one run tells you everything.
1209
1213
 
1210
1214
  | Version | What changed |
1211
1215
  |---|---|
1216
+ | **[1.14.0](docs/en/releases/1.14.md#1140)** | A machine now checks that what we wrote down is true — green does not mean guarded |
1217
+ | [1.13.1](docs/en/releases/1.13.md#1131) | What shipped was not what the source said — 47 of 148 files went out with CRLF line endings |
1212
1218
  | **[1.13.0](docs/en/releases/1.13.md#1130)** | Every place deel touches someone else's endpoint, re-examined — three independent reviewers, four findings they shared |
1213
1219
  | **[1.12.0](docs/en/releases/1.12.md#1120)** | The same prefix was being sent again on every step |
1214
1220
  | **[1.10.0](docs/en/releases/1.10.md#1100)** | ESC actually stops · a full context carries on inside the same turn · every vendor endpoint measured |
package/bin/deel.js CHANGED
@@ -242,13 +242,18 @@ function help() {
242
242
  say('');
243
243
  say(` ${c.cyan('deel run "검사 돌리고 실패한 것만 알려줘"')}`);
244
244
  say(` ${c.cyan('echo "..." | deel run')} ${c.gray('시킬 말을 표준입력으로 넣어도 됩니다')}`);
245
+ // 대화 화면에서 손으로 치던 슬래시 명령을 그대로 배치에 옮기는 자리 (src/oneshot.js).
246
+ say(` ${c.cyan('deel run /배포점검 서버3')} ${c.gray('.claude/commands 에 적어 둔 슬래시 명령도 그대로')}`);
245
247
  say(` ${c.gray('deel -p "..." 도 같습니다.')} ${c.gray('위 대화 시작 옵션을 그대로 씁니다.')}`);
246
248
  say('');
247
249
  say(` ${c.gray('--json')} 결과를 JSON 한 덩이로 (답·도구 횟수·토큰·끝난 까닭)`);
248
250
  say(` ${c.gray('--quiet')} 도구가 무엇을 했는지 안 적음 (오류는 그래도 적음)`);
249
251
  say(` ${c.gray('--yes')} 승인이 필요한 것도 그냥 실행. ${c.yellow('기본은 거부입니다')}`);
250
252
  say(` ${c.gray('답은 표준출력, 도구 기록은 표준오류로 나갑니다 — 파이프로 넘겨도 답만 넘어갑니다.')}`);
251
- say(` ${c.gray('끝난 까닭이 종료코드에 담깁니다:')} ${c.gray('0 끝냄 · 1 오류 · 2 걸음수상한 · 3 헛돎 · 4 중단 · 5 말없이끊김')}`);
253
+ // 줄은 src/oneshot.js EXIT 짝이다. test/exitcode.test.js 둘이
254
+ // 어긋나면 빨개진다 — 한 판 동안 refusal(6) 이 여기서 빠져 있었고, 그
255
+ // 사실을 말해 주는 자리가 아무 데도 없었다.
256
+ say(` ${c.gray('끝난 까닭이 종료코드에 담깁니다:')} ${c.gray('0 끝냄 · 1 오류 · 2 걸음수상한 · 3 헛돎 · 4 중단 · 5 말없이끊김 · 6 거절')}`);
252
257
  say('');
253
258
  say(` ${c.bold('진단 직접 지정')} ${c.gray('— 설정을 남기지 않고 확인만 할 때')}`);
254
259
  say('');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deel-local-cli",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "A coding-agent CLI that runs on local models and private gateways. Zero dependencies, Node 20+.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -48,11 +48,12 @@
48
48
  "chat": "node bin/deel.js",
49
49
  "test": "node test/run.mjs",
50
50
  "docs": "node tools/check-docs.mjs",
51
- "verify": "node test/no-bundle.test.js && node test/network.test.js && node test/web.test.js",
51
+ "verify": "node test/no-bundle.test.js && node test/network.test.js && node test/web.test.js && node test/mcp.test.js",
52
52
  "bench": "node test/edit-bench.js",
53
53
  "demo": "node test/demo.js",
54
54
  "check": "node tools/check-src.mjs",
55
55
  "coverage": "node test/coverage.mjs",
56
+ "mutate": "node tools/mutate.mjs",
56
57
  "prepublishOnly": "npm run check && npm test"
57
58
  },
58
59
  "dependencies": {},