deel-local-cli 1.16.0 → 1.17.2
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 +55 -9
- package/README.md +55 -8
- package/bin/deel.js +385 -5
- package/package.json +1 -1
- package/src/acp/serve.js +39 -1
- package/src/agent/agents.js +203 -0
- package/src/agent/loop.js +209 -17
- package/src/agent/models.js +4 -0
- package/src/agent/outschema.js +351 -0
- package/src/agent/session.js +13 -2
- package/src/backend/adapter.js +38 -2
- package/src/backend/clientcert.js +164 -0
- package/src/backend/http.js +232 -26
- package/src/backend/mcp.js +194 -30
- package/src/backend/probe.js +27 -1
- package/src/backend/wire.js +10 -0
- package/src/cmdnames.js +2 -0
- package/src/commands.js +139 -2
- package/src/completion.js +34 -4
- package/src/config.js +86 -9
- package/src/configexplain.js +177 -0
- package/src/doctor.js +195 -0
- package/src/i18n/en.js +37 -0
- package/src/i18n/ja.js +37 -0
- package/src/i18n/ko.js +37 -0
- package/src/i18n/zh.js +37 -0
- package/src/lsp/client.js +2 -2
- package/src/oneshot.js +181 -4
- package/src/pack/sbom.js +77 -3
- package/src/pack/selfpack.js +1 -1
- package/src/pack/sheet.en.js +1 -1
- package/src/repl.js +74 -3
- package/src/safety/hooks.js +389 -0
- package/src/safety/policy.js +74 -0
- package/src/safety/shellenv.js +116 -0
- package/src/safety/trust.js +230 -0
- package/src/setup.js +9 -0
- package/src/stats.js +162 -0
- package/src/tools/docs.js +12 -2
- package/src/tools/hwpxwrite.js +302 -0
- package/src/tools/index.js +128 -9
- package/src/tools/jobs.js +11 -6
- package/src/tools/spawn.js +19 -1
- package/src/tools/task.js +8 -2
package/README.ko.md
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
[](https://github.com/jysvai/deel-local-cli/actions/workflows/test.yml)
|
|
22
22
|
[](https://github.com/jysvai/deel-local-cli/actions/workflows/codeql.yml)
|
|
23
|
-
[](docs/ko/develop.md)
|
|
24
24
|
|
|
25
25
|
[](https://www.npmjs.com/package/deel-local-cli?activeTab=dependencies)
|
|
26
26
|
[](package.json)
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
- [자동 압축](#자동-압축)
|
|
74
74
|
- [대화 이어하기](#대화-이어하기)
|
|
75
75
|
- [밖에서 도구 붙이기 (MCP)](#밖에서-도구-붙이기-mcp)
|
|
76
|
+
- [사내 규칙을 직접 걸기 (훅)](#사내-규칙을-직접-걸기-훅)
|
|
76
77
|
- [에디터 안에서 쓰기 (ACP)](#에디터-안에서-쓰기-acp)
|
|
77
78
|
- [비밀이 새지 않게](#비밀이-새지-않게)
|
|
78
79
|
- [안전망](#안전망)
|
|
@@ -89,8 +90,8 @@
|
|
|
89
90
|
| [모델 다루기](docs/ko/models.md) | 급과 창 크기 · 국산 모델 이름표 · 켤 때 프로젝트 읽기 |
|
|
90
91
|
| [화면과 조작](docs/ko/interface.md) | 입력칸 · 작업 모드 · 쉬움과 개발자 · 무엇을 묻고 무엇을 그냥 하나 |
|
|
91
92
|
| [도구 자세히](docs/ko/tools.md) | `Outline` · `Verify` · `Task` · `Jobs` · `Append` · `Def`/`Refs` · 편집 매칭 |
|
|
92
|
-
| [한글 문서와 엑셀](docs/ko/documents.md) | hwpx·docx·pptx·**PDF** · 인코딩 · 엑셀 → CSV |
|
|
93
|
-
| [늘려 쓰기](docs/ko/extend.md) | 스킬 · 플러그인 · MCP · ACP |
|
|
93
|
+
| [한글 문서와 엑셀](docs/ko/documents.md) | hwpx·docx·pptx·**PDF** · **hwpx 새로 만들기** · 인코딩 · 엑셀 → CSV |
|
|
94
|
+
| [늘려 쓰기](docs/ko/extend.md) | 스킬 · 플러그인 · MCP · 에이전트 · 훅 · ACP |
|
|
94
95
|
| [속도와 씀씀이](docs/ko/tuning.md) | 단계별 추론 강도 · 프리픽스 캐시 · 컨텍스트 길이 |
|
|
95
96
|
| [안전망과 사내 반입](docs/ko/safety.md) | 되돌리기 · 작업 범위 · 감사기록 · 심사 서류 |
|
|
96
97
|
| [설정](docs/ko/config.md) · [개발](docs/ko/develop.md) | 환경변수 · 실행 옵션 · 검사 돌리기 · 폴더 구조 |
|
|
@@ -267,7 +268,7 @@ deel --offline
|
|
|
267
268
|
무엇이 어디로 갈 수 있는지는 켤 때 화면 맨 위에 늘 적혀 있습니다.
|
|
268
269
|
|
|
269
270
|
```
|
|
270
|
-
deel 1.
|
|
271
|
+
deel 1.17.2 ⌂ 이 안
|
|
271
272
|
보냄 이 컴퓨터 안 127.0.0.1:11434 ← 여기 말고는 어디로도 안 갑니다
|
|
272
273
|
```
|
|
273
274
|
|
|
@@ -498,6 +499,8 @@ LM Studio 는 `/api/v0/models`, llama.cpp 는 `/props`. 못 알아보면 `(추
|
|
|
498
499
|
| `/recall <말>` | 지난 대화에서 **내용으로** 찾기 |
|
|
499
500
|
| `/memory` | 대화가 끝나도 남는 기억 — 보기·적기·지우기 |
|
|
500
501
|
| `/mcp` | 밖에서 붙인 도구(MCP) 서버 보기 |
|
|
502
|
+
| `/hooks` | 적어 둔 훅 보기 (어디서 읽었고 언제 도는지) |
|
|
503
|
+
| `/agents` | 이름 붙인 하위 작업 보기 |
|
|
501
504
|
| `/init` | `DEEL.md` 규칙 파일 만들기 |
|
|
502
505
|
| `/exit` | 끝내기 |
|
|
503
506
|
|
|
@@ -596,7 +599,7 @@ LM Studio 는 `/api/v0/models`, llama.cpp 는 `/props`. 못 알아보면 `(추
|
|
|
596
599
|
| 도구 | 하는 일 |
|
|
597
600
|
|---|---|
|
|
598
601
|
| `Read` | 파일 읽기 (줄 번호 · `offset`/`limit` 지원 · **엑셀은 CSV 로, hwpx·docx·pptx·PDF 는 글로 바꿔서**) |
|
|
599
|
-
| `Write` | 파일 쓰기·덮어쓰기 (**여러 개는 `files` 배열로 한 번에**) |
|
|
602
|
+
| `Write` | 파일 쓰기·덮어쓰기 (**여러 개는 `files` 배열로 한 번에** · **없는 `.hwpx` 는 한글 문서로 새로 만듦**) |
|
|
600
603
|
| `Append` | 파일 끝에 이어 붙이기 — **큰 파일을 나눠 쓰는 자리** |
|
|
601
604
|
| `Edit` | 정확한 문자열 바꾸기 (`replace_all` · **여러 군데는 `edits` 배열로 한 번에**) |
|
|
602
605
|
| `Move` | 파일·폴더 옮기기·이름 바꾸기 — **구조를 바꾸는 자리** (`moves` 배열로 한 번에 · 되돌리기에 잡힘) |
|
|
@@ -632,7 +635,13 @@ Claude Code 에 없는 것은 아홉입니다 — `Append` · `Move` · `Ask` ·
|
|
|
632
635
|
|
|
633
636
|
**CP949 로 저장된 파일은 CP949 로 되돌려 씁니다.** 인코딩을 바꾸지 않습니다.
|
|
634
637
|
엑셀(`.xlsx`)은 CSV 로, 한글·워드·파워포인트(`.hwpx`/`.docx`/`.pptx`)와
|
|
635
|
-
**PDF** 는 글로 바꿔서 읽습니다 —
|
|
638
|
+
**PDF** 는 글로 바꿔서 읽습니다 — 고치기는 안 됩니다.
|
|
639
|
+
|
|
640
|
+
**다만 없던 한글 문서를 새로 만드는 것은 됩니다.** `Write` 로 아직 없는
|
|
641
|
+
`.hwpx` 를 쓰면 규격(OWPML)대로 진짜 hwpx 를 만듭니다 — `#` 은 제목으로, `-` 는
|
|
642
|
+
글머리표로 들어갑니다. 「보고서 써 줘」 가 `.md` 하나로 끝나고 사람이 그걸
|
|
643
|
+
한글에 다시 붙여넣던 자리입니다. 표는 글줄로 펴고, **한글이 이 파일을 여는지는
|
|
644
|
+
여기서 확인하지 못했다**고 문서에 그대로 적어 뒀습니다.
|
|
636
645
|
|
|
637
646
|
PDF 는 **못 읽은 쪽을 못 읽었다고 말합니다.** 스캔본·암호·글꼴 표가 없는 쪽은
|
|
638
647
|
빈 글로 넘기지 않고 그 자리에 까닭을 적습니다 — 빈 글은 「그런 내용이 없다」로
|
|
@@ -672,7 +681,7 @@ deel doc2md 스펙.pdf --out 스펙.md # 파일로
|
|
|
672
681
|
없으면 **없다고 못 박고 끝냅니다**(무엇이 없어서 못 하는지, 무엇을 하면 되는지,
|
|
673
682
|
그리고 「다시 열지 말라」까지). 끄려면 `DEEL_CONVERT=off`.
|
|
674
683
|
|
|
675
|
-
> **자세히** — 인코딩 · 엑셀 · hwpx/docx/pptx · PDF · `doc2md` · 변환기 빌려 쓰기
|
|
684
|
+
> **자세히** — 인코딩 · 엑셀 · hwpx/docx/pptx · **hwpx 새로 만들기** · PDF · `doc2md` · 변환기 빌려 쓰기
|
|
676
685
|
>
|
|
677
686
|
> **[한글 문서와 엑셀 읽기 →](docs/ko/documents.md#한글-문서와-엑셀)**
|
|
678
687
|
|
|
@@ -921,6 +930,37 @@ JSON-RPC 2.0 을 주고받는 것이 전부라, `child_process` 와 `JSON` 이
|
|
|
921
930
|
|
|
922
931
|
---
|
|
923
932
|
|
|
933
|
+
## 사내 규칙을 직접 걸기 (훅)
|
|
934
|
+
|
|
935
|
+
사내마다 지켜야 하는 것이 다릅니다. 어떤 팀은 `git push` 를 절대 못 하게 해야 하고,
|
|
936
|
+
어떤 팀은 파일을 고칠 때마다 사내 포맷터를 돌려야 합니다. 그걸 전부 프로그램 안에
|
|
937
|
+
넣으면 팀마다 포크를 뜨게 되고, 포크를 뜨면 우리가 고치는 것이 그 팀에 안 갑니다.
|
|
938
|
+
그래서 **자리만 내줍니다.**
|
|
939
|
+
|
|
940
|
+
`.deel/hooks.json` 에 적습니다. Claude Code 의 `hooks` 모양도 그대로 받습니다:
|
|
941
|
+
|
|
942
|
+
```json
|
|
943
|
+
{ "hooks": [ { "때": "도구전", "도구": "Bash", "명령": "python .deel/gate.py" } ] }
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
넘길 것은 전부 **stdin 으로 JSON 한 줄**이고, 답은 **종료 코드**입니다 — `0` 통과,
|
|
947
|
+
`2` 막음. 걸 수 있는 자리는 `도구전`(막을 수 있음) · `말전`(막을 수 있음) ·
|
|
948
|
+
`도구후` · `턴끝` 넷입니다. `/hooks` 로 무엇이 걸렸는지 봅니다.
|
|
949
|
+
|
|
950
|
+
**고장 나면 막습니다.** 흔한 규격은 「2번만 막고 나머지 실패는 지나간다」 인데, 그러면
|
|
951
|
+
훅 파일의 오타 하나가 그 문을 조용히 열어 둡니다 — 화면에는 「훅 3개」 라고 뜬 채로.
|
|
952
|
+
문지기가 쓰러져 있으면 문은 잠긴 것이 아닙니다.
|
|
953
|
+
|
|
954
|
+
**프로젝트 파일은 믿는 폴더에서만 읽습니다.** 없으면 `git clone` 한 번이 곧 남의 명령이
|
|
955
|
+
내 PC 에서 도는 것이 됩니다. `deel --no-hooks` 로 이번 판만, `DEEL_HOOKS=off` 로 아예
|
|
956
|
+
끕니다.
|
|
957
|
+
|
|
958
|
+
> **자세히** — 이것도 남의 프로그램입니다 · 고장 나면 막습니다
|
|
959
|
+
>
|
|
960
|
+
> **[늘려 쓰기 읽기 →](docs/ko/extend.md#사내-규칙을-직접-걸기-훅)**
|
|
961
|
+
|
|
962
|
+
---
|
|
963
|
+
|
|
924
964
|
## 에디터 안에서 쓰기 (ACP)
|
|
925
965
|
|
|
926
966
|
터미널을 하나 더 띄우게 하는 도구는 두 주쯤 뒤에 안 씁니다. 개발자는 하루 종일
|
|
@@ -1088,7 +1128,7 @@ zip 안에는 **사람이 읽을 것 한 장, 기계가 읽을 것 두 장**이
|
|
|
1088
1128
|
| 파일 | 무엇 |
|
|
1089
1129
|
|---|---|
|
|
1090
1130
|
| `반입심사서.txt` | 의존성 · 설치 스크립트 · **소스를 훑어 찾은 네트워크·외부 명령 호출 자리 전부**(파일:줄) · 나가는 길 세 갈래 · 파일별 SHA-256 |
|
|
1091
|
-
| `sbom.cdx.json` | **SBOM (CycloneDX 1.
|
|
1131
|
+
| `sbom.cdx.json` | **SBOM (CycloneDX 1.7).** 스캐너에 그대로 넣습니다. 파일마다 부품 하나에 SHA-256 과 라이선스, 의존성은 **빈 배열로 명시** — 안 적어 낸 것과 없는 것은 다릅니다. CISA 2026 최소 요소(해시 알고리즘 · 부품 라이선스 · 만든 도구 · 만든 맥락) 네 칸이 다 차 있습니다 |
|
|
1092
1132
|
| `심사명세.json` | 통신 목록(갈래마다 언제·어디로·무엇이·막는법·소스 자리) · **감사기록 사양**(칸 이름과 뜻, 안 남기는 것) · 파일 해시 |
|
|
1093
1133
|
|
|
1094
1134
|
```bash
|
|
@@ -1096,6 +1136,7 @@ deel audit # 사람이 읽는 심사서만 보기
|
|
|
1096
1136
|
deel sbom # 기계가 읽는 두 장을 표준출력으로 (deel sbom | jq)
|
|
1097
1137
|
deel sbom --out 심사.json # 파일로
|
|
1098
1138
|
deel sbom --only sbom # SBOM 한 장만
|
|
1139
|
+
deel stats # 이 폴더에서 실제로 무엇을 했나 (.deel/audit.jsonl 요약)
|
|
1099
1140
|
```
|
|
1100
1141
|
|
|
1101
1142
|
셋 다 손으로 적지 않고 코드가 소스를 훑어서 만듭니다 — 손으로 적으면 언젠가
|
|
@@ -1128,11 +1169,13 @@ deel sbom --only sbom # SBOM 한 장만
|
|
|
1128
1169
|
| `인증서 문제` | `set NODE_EXTRA_CA_CERTS=C:\경로\사내CA.pem` |
|
|
1129
1170
|
| 프록시를 거쳐야 함 | `set HTTPS_PROXY=http://프록시:포트` (인증은 `http://user:pw@프록시:포트`). 첫 화면과 `/status` 에 `프록시 …` 가 뜨면 거치는 것. 안 거칠 곳은 `NO_PROXY=.corp.com,10.1.2.3`, 아예 끄려면 설정에 `"proxy": "none"` |
|
|
1130
1171
|
| 프록시가 407 을 줌 | 프록시 주소에 `user:pw@` 를 넣으세요. NTLM · Negotiate 만 받는 프록시는 못 씁니다 — 담당자에게 Basic 이나 인증 없는 주소를 문의 |
|
|
1172
|
+
| 게이트웨이가 **내 인증서**를 요구함 (mTLS) | 프로필에 `"인증서": { "cert": "...", "key": "..." }` — `.pfx` 한 덩이도 됩니다. 암호는 `DEEL_CERT_PASS`. 프록시 뒤에서도 됩니다. [설정 →](docs/ko/config.md#게이트웨이가-우리-인증서를-요구할-때-mtls) |
|
|
1131
1173
|
| 401 / 403 | 키가 틀렸거나 인증 헤더 형식이 다름 (4가지를 자동 시도합니다) |
|
|
1132
1174
|
| `허용되지 않은 주소입니다` | 자물쇠가 막은 것. 정상입니다 — `/model` 로 연결을 고르세요 |
|
|
1133
1175
|
| 도구 호출이 안 먹음 | `deel diagnose` 로 판정을 보세요. 작은 모델(1B~3B)은 자주 못 합니다 |
|
|
1134
1176
|
| 대답이 비어 있음 | 스트리밍을 무시하는 서버입니다. 한 번은 저절로 다시 부르고, 그래도 비면 이 대화에서는 스트리밍을 끕니다 |
|
|
1135
1177
|
| 큰 파일이 중간에 끊김 | `/out` 으로 지금 상한을 보고 올리세요. 상한을 몰라 16,384 로 서 있을 수 있습니다 |
|
|
1178
|
+
| `60초 동안 아무것도 안 와서 끊었습니다` | 답을 통째로 모았다가 한 번에 주는 게이트웨이입니다. 프로필에 `"잠잠": 180000` (밀리초). 받은 데까지는 화면에 남습니다 |
|
|
1136
1179
|
| `HTTP 400` 만 뜸 | 서버가 보낸 문장을 그대로 보여 줍니다. 길이 문제면 숫자를 읽어 저절로 맞춥니다 |
|
|
1137
1180
|
| `429` · `503` 이 뜸 | 게이트웨이가 잠깐 막은 것입니다. 세 번까지 저절로 기다렸다 다시 부릅니다(`Retry-After` 를 지킵니다). 그래도 계속 뜨면 할당량을 보세요 |
|
|
1138
1181
|
| `deel scan` 이 0곳 | 로컬 서버가 꺼져 있거나 다른 포트 — `--ports` 로 지정 |
|
|
@@ -1142,7 +1185,7 @@ deel sbom --only sbom # SBOM 한 장만
|
|
|
1142
1185
|
## 개발
|
|
1143
1186
|
|
|
1144
1187
|
```bash
|
|
1145
|
-
npm test 전체 검증 (7,
|
|
1188
|
+
npm test 전체 검증 (7,855항목 — 몇몇은 터미널에 따라 갈립니다)
|
|
1146
1189
|
npm run coverage 검사가 소스의 어디를 밟았는지
|
|
1147
1190
|
npm run verify 반입·통신 검증만
|
|
1148
1191
|
npm run bench 편집 성공률 측정
|
|
@@ -1211,6 +1254,9 @@ zip 은 진짜 `unzip` 으로, tar 는 진짜 `tar` 가 만든 것을 읽혀 교
|
|
|
1211
1254
|
|
|
1212
1255
|
| 판 | 무엇이 바뀌었나 |
|
|
1213
1256
|
|---|---|
|
|
1257
|
+
| [1.17.2](docs/ko/releases/1.17.md#1172) | 다른 눈으로 한 번 더 — 한글이 못 여는 hwpx · 이름 없이 나가던 요청 둘 |
|
|
1258
|
+
| [1.17.1](docs/ko/releases/1.17.md#1171) | 내 PC 에서만 초록이던 것 둘 — 지운 폴더에 쓰기 · 소스에 박힌 날 NUL |
|
|
1259
|
+
| **[1.17.0](docs/ko/releases/1.17.md#1170)** | 사내에 들여놓을 때 막히던 자리들 · 믿는 폴더 · mTLS · `doctor` · 훅 · 서브에이전트 · hwpx 쓰기 |
|
|
1214
1260
|
| **[1.16.0](docs/ko/releases/1.16.md#1160)** | 깊이 봐 달라는 말을 얕게 받던 자리 · 게이트웨이 캐시 · `doc2md` · Figma `.fig` |
|
|
1215
1261
|
| **[1.15.1](docs/ko/releases/1.15.md#1151)** | 에디터에 우리가 어떻게 인증받는지 말합니다 — ACP 레지스트리 등재 조건 |
|
|
1216
1262
|
| **[1.15.0](docs/ko/releases/1.15.md#1150)** | 같은 것을 두 번 하지 않습니다 — 프리픽스 캐시를 깨던 조용히 비싼 아홉 자리 |
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Vendor APIs connect too — **only when you say so**
|
|
|
20
20
|
|
|
21
21
|
[](https://github.com/jysvai/deel-local-cli/actions/workflows/test.yml)
|
|
22
22
|
[](https://github.com/jysvai/deel-local-cli/actions/workflows/codeql.yml)
|
|
23
|
-
[](docs/en/develop.md)
|
|
24
24
|
|
|
25
25
|
[](https://www.npmjs.com/package/deel-local-cli?activeTab=dependencies)
|
|
26
26
|
[](package.json)
|
|
@@ -96,6 +96,7 @@ No account, no sign-up, no telemetry. If you already run Ollama or LM Studio,
|
|
|
96
96
|
- [Auto-compaction](#auto-compaction)
|
|
97
97
|
- [Resuming a conversation](#resuming-a-conversation)
|
|
98
98
|
- [Attaching tools from outside (MCP)](#attaching-tools-from-outside-mcp)
|
|
99
|
+
- [Your own rules, enforced (hooks)](#your-own-rules-enforced-hooks)
|
|
99
100
|
- [Inside your editor (ACP)](#inside-your-editor-acp)
|
|
100
101
|
- [Keeping secrets out of the conversation](#keeping-secrets-out-of-the-conversation)
|
|
101
102
|
- [Safety](#safety)
|
|
@@ -114,8 +115,8 @@ This page is the **summary**. Each section links to the detail behind it.
|
|
|
114
115
|
| [Models](docs/en/models.md) | Grade and window size · Korean-model presets · project detection |
|
|
115
116
|
| [The screen](docs/en/interface.md) | The input box · work modes · simple vs developer · what it asks about |
|
|
116
117
|
| [Tools in depth](docs/en/tools.md) | `Outline` · `Verify` · `Task` · `Jobs` · `Append` · `Def`/`Refs` · edit matching |
|
|
117
|
-
| [Korean documents and Excel](docs/en/documents.md) | hwpx/docx/pptx/**PDF** · encoding · Excel → CSV |
|
|
118
|
-
| [Extending](docs/en/extend.md) | Skills · plugins · MCP · ACP |
|
|
118
|
+
| [Korean documents and Excel](docs/en/documents.md) | hwpx/docx/pptx/**PDF** · **creating an hwpx** · encoding · Excel → CSV |
|
|
119
|
+
| [Extending](docs/en/extend.md) | Skills · plugins · MCP · subagents · hooks · ACP |
|
|
119
120
|
| [Speed and spend](docs/en/tuning.md) | Per-stage effort · the prefix cache · context length |
|
|
120
121
|
| [Safety and corporate review](docs/en/safety.md) | Undo · working scope · audit log · the review package |
|
|
121
122
|
| [Configuration](docs/en/config.md) · [Development](docs/en/develop.md) | Env vars · run flags · running the tests · folder layout |
|
|
@@ -338,7 +339,7 @@ deel --offline
|
|
|
338
339
|
The destination is printed at the top of every session:
|
|
339
340
|
|
|
340
341
|
```
|
|
341
|
-
deel 1.
|
|
342
|
+
deel 1.17.2 ⌂ inside
|
|
342
343
|
Sends to this machine 127.0.0.1:11434 ← nowhere else
|
|
343
344
|
```
|
|
344
345
|
|
|
@@ -561,6 +562,8 @@ Names follow Claude Code / Codex conventions.
|
|
|
561
562
|
| `/recall <text>` | Search past conversations **by content** |
|
|
562
563
|
| `/memory` | What persists across sessions — view, add, delete |
|
|
563
564
|
| `/mcp` | Externally attached tools (MCP servers) |
|
|
565
|
+
| `/hooks` | Configured hooks — where they came from, when they run |
|
|
566
|
+
| `/agents` | Named subagent definitions |
|
|
564
567
|
| `/init` | Create a `DEEL.md` rules file |
|
|
565
568
|
| `/exit` | Quit |
|
|
566
569
|
|
|
@@ -662,7 +665,7 @@ Names and arguments match Claude Code, so skills written for that convention wor
|
|
|
662
665
|
| Tool | What it does |
|
|
663
666
|
|---|---|
|
|
664
667
|
| `Read` | Read a file (line numbers, `offset`/`limit`, **Excel as CSV, hwpx/docx/pptx and PDF as text**) |
|
|
665
|
-
| `Write` | Write / overwrite a file (**several at once via the `files` array**) |
|
|
668
|
+
| `Write` | Write / overwrite a file (**several at once via the `files` array**, **a `.hwpx` that does not exist yet becomes a real Hancom document**) |
|
|
666
669
|
| `Append` | Append to the end of a file — **how large files get written in pieces** |
|
|
667
670
|
| `Edit` | Replace an exact string (`replace_all`; **several sites at once via the `edits` array**) |
|
|
668
671
|
| `Move` | Move / rename files and folders — **how you restructure** (`moves` array; covered by undo) |
|
|
@@ -698,6 +701,13 @@ their cost; here is why.
|
|
|
698
701
|
**A file saved as CP949 is written back as CP949.** The encoding is never changed.
|
|
699
702
|
Excel (`.xlsx`) is read as CSV — read-only.
|
|
700
703
|
|
|
704
|
+
**Creating a Korean document that did not exist does work, though.** `Write` on a
|
|
705
|
+
`.hwpx` path that is not there yet produces a real hwpx to spec (OWPML) — `#`
|
|
706
|
+
becomes a heading, `-` becomes a bullet. That is the spot where "write me the
|
|
707
|
+
report" used to end at one `.md` a person then pasted into Hancom Office. Tables
|
|
708
|
+
are flattened to text, and the docs say plainly that **whether Hancom Office opens
|
|
709
|
+
the file was not verified here.**
|
|
710
|
+
|
|
701
711
|
To keep a document as **one Markdown file**, use `deel doc2md`. Tables survive as
|
|
702
712
|
real `| name | value |` tables, so a model has far less to guess at than it does
|
|
703
713
|
with flattened text.
|
|
@@ -733,7 +743,7 @@ on this machine** — the same terms on which deel borrows `rg`, and nothing is
|
|
|
733
743
|
With no converter it **says so definitively and stops**: what is missing, what you can do about
|
|
734
744
|
it, and not to open the file again. Turn it off with `DEEL_CONVERT=off`.
|
|
735
745
|
|
|
736
|
-
> **More** — Encoding · Excel · `doc2md` · borrowing a converter
|
|
746
|
+
> **More** — Encoding · Excel · **creating an hwpx** · `doc2md` · borrowing a converter
|
|
737
747
|
>
|
|
738
748
|
> **[Korean documents and Excel read →](docs/en/documents.md#korean-text-and-excel)**
|
|
739
749
|
|
|
@@ -1001,6 +1011,37 @@ The model sees it as `mcp__wiki__search`. `/mcp` shows what is attached.
|
|
|
1001
1011
|
|
|
1002
1012
|
---
|
|
1003
1013
|
|
|
1014
|
+
## Your own rules, enforced (hooks)
|
|
1015
|
+
|
|
1016
|
+
Every company guards something different — one team must never let `git push` run,
|
|
1017
|
+
another needs its formatter after every edit. Putting all of it inside the program means
|
|
1018
|
+
every team forks, and from then on our fixes stop reaching them. So we give you
|
|
1019
|
+
**the place** instead.
|
|
1020
|
+
|
|
1021
|
+
Write it in `.deel/hooks.json`. Claude Code's `hooks` shape is accepted as-is:
|
|
1022
|
+
|
|
1023
|
+
```json
|
|
1024
|
+
{ "hooks": [ { "때": "도구전", "도구": "Bash", "명령": "python .deel/gate.py" } ] }
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
Everything is handed over as **one line of JSON on stdin**, and the answer is the
|
|
1028
|
+
**exit code** — `0` passes, `2` blocks. Four events: `PreToolUse` (can block),
|
|
1029
|
+
`UserPromptSubmit` (can block), `PostToolUse`, `Stop`. `/hooks` shows what is armed.
|
|
1030
|
+
|
|
1031
|
+
**A broken hook blocks.** The common convention lets every failure but exit 2 pass
|
|
1032
|
+
through, so one typo in the hook file leaves the gate quietly open — while the screen
|
|
1033
|
+
still says "3 hooks." A gate with nobody at it is not a locked gate.
|
|
1034
|
+
|
|
1035
|
+
**The project file is read only in a trusted folder.** Without that, one `git clone`
|
|
1036
|
+
is enough to run someone else's commands on your machine. `deel --no-hooks` for one
|
|
1037
|
+
run, `DEEL_HOOKS=off` for good.
|
|
1038
|
+
|
|
1039
|
+
> **More** — This is somebody else's program too · A broken hook blocks
|
|
1040
|
+
>
|
|
1041
|
+
> **[Extending read →](docs/en/extend.md#your-own-rules-enforced-hooks)**
|
|
1042
|
+
|
|
1043
|
+
---
|
|
1044
|
+
|
|
1004
1045
|
## Inside your editor (ACP)
|
|
1005
1046
|
|
|
1006
1047
|
A tool that makes you open one more terminal window stops being used after about two weeks.
|
|
@@ -1157,7 +1198,7 @@ audit-log spec to write SIEM ingestion rules.
|
|
|
1157
1198
|
| File | What |
|
|
1158
1199
|
|---|---|
|
|
1159
1200
|
| `import-review.txt` | Dependencies · install scripts · **every network and process-spawn call site found by scanning the source** (file:line) · the three outbound lanes · SHA-256 per file |
|
|
1160
|
-
| `sbom.cdx.json` | **SBOM (CycloneDX 1.
|
|
1201
|
+
| `sbom.cdx.json` | **SBOM (CycloneDX 1.7).** Feed it straight to a scanner. One component per file with SHA-256 and a license; dependencies stated as an **explicit empty array** — "not declared" and "none" are different claims. All four CISA 2026 minimum elements (hash algorithm, component license, generating tool, generation context) are filled in |
|
|
1161
1202
|
| `audit-spec.json` | Egress list (per lane: when, where, what, how it's stopped, and the source location) · **audit-log spec** (field names and meanings, plus what is never recorded) · file hashes |
|
|
1162
1203
|
|
|
1163
1204
|
```bash
|
|
@@ -1165,6 +1206,7 @@ deel audit # the human-readable sheet only
|
|
|
1165
1206
|
deel sbom # the two machine-readable ones, on stdout (deel sbom | jq)
|
|
1166
1207
|
deel sbom --out review.json # to a file
|
|
1167
1208
|
deel sbom --only sbom # just the SBOM
|
|
1209
|
+
deel stats # what this folder actually did (summarises .deel/audit.jsonl)
|
|
1168
1210
|
```
|
|
1169
1211
|
|
|
1170
1212
|
With the screen language set to English these three, and the `deel pack` archive itself,
|
|
@@ -1200,11 +1242,13 @@ Stored in `~/.deel/config.json`. A `.deel/config.json` in the project folder tak
|
|
|
1200
1242
|
| certificate error | `set NODE_EXTRA_CA_CERTS=C:\path\corp-ca.pem` |
|
|
1201
1243
|
| behind a proxy | `set HTTPS_PROXY=http://proxy:port` (with auth: `http://user:pw@proxy:port`). If the first screen and `/status` show `proxy …`, it is in use. Exclude hosts with `NO_PROXY=.corp.com,10.1.2.3`; turn it off entirely with `"proxy": "none"` in the config |
|
|
1202
1244
|
| the proxy answers 407 | Put `user:pw@` into the proxy address. Proxies that only accept NTLM · Negotiate are not supported — ask the admin for Basic or an unauthenticated address |
|
|
1245
|
+
| the gateway asks for **your** certificate (mTLS) | Put `"clientCert": { "certFile": "...", "keyFile": "..." }` in the profile — a `.pfx` bundle works too. Passphrase via `DEEL_CERT_PASS`. Works behind a proxy. [Config →](docs/en/config.md#when-the-gateway-asks-for-our-certificate-mtls) |
|
|
1203
1246
|
| 401 / 403 | Wrong key or auth header style (four are tried automatically) |
|
|
1204
1247
|
| `address not permitted` | The lock did its job — pick a connection with `/model` |
|
|
1205
1248
|
| Tool calls don't work | Run `deel diagnose`. Small models (1B–3B) often can't |
|
|
1206
1249
|
| Empty replies | The server ignores streaming. deel retries once, then turns streaming off for the session |
|
|
1207
1250
|
| Large files cut off mid-write | Check `/out` and raise it — the cap may be sitting at the 16,384 default because it could not be discovered |
|
|
1251
|
+
| `Nothing arrived for 60s` | The gateway buffers the whole answer and sends it at once. Set `"streamIdleMs": 180000` in the profile. What did arrive stays on screen |
|
|
1208
1252
|
| Only `HTTP 400` shows | The server's own message is shown verbatim. If it is a length problem the number is read and applied automatically |
|
|
1209
1253
|
| `429` · `503` shows | The gateway pushed back for a moment. deel waits and calls again, up to three times (honouring `Retry-After`). If it keeps happening, check your quota |
|
|
1210
1254
|
| `deel scan` finds nothing | Server is off or on another port — use `--ports` |
|
|
@@ -1214,7 +1258,7 @@ Stored in `~/.deel/config.json`. A `.deel/config.json` in the project folder tak
|
|
|
1214
1258
|
## Development
|
|
1215
1259
|
|
|
1216
1260
|
```bash
|
|
1217
|
-
npm test Full suite (7,
|
|
1261
|
+
npm test Full suite (7,855 checks; a few are TTY-dependent)
|
|
1218
1262
|
npm run coverage Which lines the tests actually execute
|
|
1219
1263
|
npm run verify Import + network checks only
|
|
1220
1264
|
npm run bench Edit success rate
|
|
@@ -1269,6 +1313,9 @@ so one run tells you everything.
|
|
|
1269
1313
|
|
|
1270
1314
|
| Version | What changed |
|
|
1271
1315
|
|---|---|
|
|
1316
|
+
| [1.17.2](docs/en/releases/1.17.md#1172) | A second pair of eyes — an hwpx Hancom cannot open · two requests going out unnamed |
|
|
1317
|
+
| [1.17.1](docs/en/releases/1.17.md#1171) | Two things only green on one machine — writing into a deleted directory · raw NUL in the source |
|
|
1318
|
+
| **[1.17.0](docs/en/releases/1.17.md#1170)** | What blocked it from getting inside a company · trusted folders · mTLS · `doctor` · hooks · subagents · writing hwpx |
|
|
1272
1319
|
| **[1.16.0](docs/en/releases/1.16.md#1160)** | A deep request no longer lands in a shallow mode · gateway cache · `doc2md` · Figma `.fig` |
|
|
1273
1320
|
| **[1.15.1](docs/en/releases/1.15.md#1151)** | Telling the editor how we get authenticated — ACP Registry listing requirement |
|
|
1274
1321
|
| **[1.15.0](docs/en/releases/1.15.md#1150)** | Stop doing the same thing twice — nine quietly expensive places that broke the prefix cache |
|