deel-local-cli 1.20.13 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +96 -78
- package/README.md +119 -81
- package/bin/deel.js +398 -32
- package/package.json +2 -1
- package/src/acp/jsonrpc.js +87 -7
- package/src/acp/map.js +23 -3
- package/src/acp/serve.js +333 -25
- package/src/agent/agents.js +110 -12
- package/src/agent/askcheck.js +50 -6
- package/src/agent/asks.js +59 -5
- package/src/agent/budget.js +9 -2
- package/src/agent/card.js +8 -2
- package/src/agent/commit.js +168 -16
- package/src/agent/compact.js +93 -21
- package/src/agent/{/354/213/240/353/242/260/353/217/204.js → confidence.js} +1 -1
- package/src/agent/effort.js +85 -15
- package/src/agent/evidence.js +63 -7
- package/src/agent/evolve.js +132 -24
- package/src/agent/grade.js +12 -3
- package/src/agent/loop.js +408 -81
- package/src/agent/memory.js +176 -29
- package/src/agent/mention.js +22 -5
- package/src/agent/models.js +31 -7
- package/src/agent/modes.js +25 -10
- package/src/agent/outschema.js +381 -56
- package/src/agent/pins.js +33 -2
- package/src/agent/project.js +73 -8
- package/src/agent/recall.js +40 -9
- package/src/agent/{/354/204/261/355/225/234/352/270/260/353/241/235.js → recordshape.js} +19 -8
- package/src/agent/review.js +143 -13
- package/src/agent/route.js +253 -26
- package/src/agent/salvage.js +2 -1
- package/src/agent/session.js +457 -31
- package/src/agent/store.js +232 -22
- package/src/agent/threads.js +52 -3
- package/src/backend/adapter.js +508 -85
- package/src/backend/azure.js +12 -1
- package/src/backend/cachemark.js +31 -5
- package/src/backend/clientcert.js +23 -1
- package/src/backend/ctxsize.js +56 -9
- package/src/backend/detect.js +252 -19
- package/src/backend/http.js +383 -42
- package/src/backend/learn.js +101 -11
- package/src/backend/mcp.js +333 -24
- package/src/backend/price.js +61 -13
- package/src/backend/probe.js +188 -36
- package/src/backend/proxy.js +108 -14
- package/src/backend/quota.js +226 -30
- package/src/backend/retry.js +46 -3
- package/src/backend/scan.js +47 -10
- package/src/backend/scanui.js +57 -7
- package/src/backend/toolfit.js +204 -22
- package/src/backend/vision.js +14 -1
- package/src/backend/wire.js +58 -10
- package/src/cmdnames.js +16 -0
- package/src/commands/common.js +70 -0
- package/src/commands/extend.js +300 -0
- package/src/commands/model.js +852 -0
- package/src/commands/view.js +328 -0
- package/src/commands/work.js +823 -0
- package/src/commands.js +193 -2082
- package/src/completion.js +45 -3
- package/src/config.js +452 -39
- package/src/configexplain.js +125 -14
- package/src/doctor.js +164 -26
- package/src/i18n/en.js +22 -0
- package/src/i18n/index.js +31 -1
- package/src/i18n/ja.js +25 -1
- package/src/i18n/ko.js +25 -2
- package/src/i18n/zh.js +25 -1
- package/src/lsp/client.js +111 -9
- package/src/lsp/servers.js +86 -22
- package/src/oneshot.js +325 -65
- package/src/pack/sbom.js +28 -5
- package/src/pack/selfpack.js +54 -5
- package/src/pack/sheet.en.js +24 -3
- package/src/pack/tar.js +45 -8
- package/src/pack/zip.js +103 -8
- package/src/plugins/manage.js +165 -14
- package/src/preview/serve.js +239 -23
- package/src/providers/bedrock.js +30 -5
- package/src/providers/gemini.js +8 -0
- package/src/providers/index.js +17 -1
- package/src/repl.js +254 -61
- package/src/report.js +7 -2
- package/src/reset.js +151 -25
- package/src/safety/audit.js +108 -8
- package/src/safety/authcmd.js +75 -5
- package/src/safety/guard.js +507 -15
- package/src/safety/hooks.js +172 -20
- package/src/safety/keystore.js +178 -18
- package/src/safety/network.js +209 -6
- package/src/safety/policy.js +377 -36
- package/src/safety/runmode.js +9 -2
- package/src/safety/secrets.js +243 -17
- package/src/safety/shellenv.js +64 -3
- package/src/safety/trust.js +298 -32
- package/src/safety/undo.js +409 -17
- package/src/setup.js +175 -17
- package/src/skills/discover.js +122 -19
- package/src/stats.js +57 -16
- package/src/tools/{/355/231/225/354/235/270/353/262/225.js → checkmethods.js} +26 -1
- package/src/tools/clipboard.js +53 -20
- package/src/tools/convert.js +118 -37
- package/src/tools/desc.en.js +48 -5
- package/src/tools/doc2md.js +11 -1
- package/src/tools/docs.js +94 -18
- package/src/tools/edit-match.js +212 -13
- package/src/tools/encoding.js +525 -28
- package/src/tools/excel-com.js +63 -15
- package/src/tools/excel.js +12 -7
- package/src/tools/fastgrep.js +444 -36
- package/src/tools/fig.js +21 -4
- package/src/tools/fsutil.js +235 -21
- package/src/tools/hwpxwrite.js +80 -19
- package/src/tools/ignore.js +55 -7
- package/src/tools/index.js +1029 -145
- package/src/tools/jobs.js +325 -50
- package/src/tools/kiwi.js +50 -5
- package/src/tools/lsp.js +164 -32
- package/src/tools/outline.js +52 -12
- package/src/tools/pdf.js +366 -56
- package/src/tools/shell.js +12 -4
- package/src/tools/spawn.js +203 -18
- package/src/tools/todo.js +73 -4
- package/src/tools/verify.js +312 -43
- package/src/tools/webfetch.js +184 -25
- package/src/tools/xlsx.js +232 -31
- package/src/ui/ansi.js +209 -15
- package/src/ui/banner.js +2 -1
- package/src/ui/complete.js +46 -4
- package/src/ui/diff.js +4 -2
- package/src/ui/export.js +91 -17
- package/src/ui/inputbox.js +58 -18
- package/src/ui/intro.js +9 -2
- package/src/ui/level.js +32 -7
- package/src/ui/md.js +101 -15
- package/src/ui/motion.js +5 -2
- package/src/ui/notify.js +7 -1
- package/src/ui/office.js +37 -5
- package/src/ui/pastechip.js +3 -2
- package/src/ui/pick.js +85 -12
- package/src/ui/prompt.js +176 -13
- package/src/ui/screen.js +2 -1
- package/src/ui/spinner.js +6 -1
- package/src/ui/status.js +80 -12
- package/src/ui/wrap.js +23 -37
- /package/src/agent/{/353/213/250/352/263/204.js" → phase.js} +0 -0
- /package/src/skills/builtin/{/352/271/212/354/235/264/354/236/210/352/262/214-/353/247/214/353/223/244/352/270/260/SKILL.md" → build-deep/SKILL.md} +0 -0
- /package/src/skills/builtin/{/354/260/250/352/267/274/354/260/250/352/267/274-/353/224/224/353/262/204/352/271/205/SKILL.md" → debug-step-by-step/SKILL.md} +0 -0
- /package/src/skills/builtin/{/353/201/235/352/271/214/354/247/200-/355/225/230/352/270/260/SKILL.md" → finish-all/SKILL.md} +0 -0
- /package/src/skills/builtin/{/354/212/244/354/212/244/353/241/234-/352/262/200/355/206/240/SKILL.md" → self-review/SKILL.md} +0 -0
- /package/src/skills/builtin/{/354/275/224/353/223/234-/354/244/204/354/235/264/352/270/260/SKILL.md" → simplify-code/SKILL.md} +0 -0
- /package/src/skills/builtin/{/354/260/224/353/237/254/353/263/264/352/270/260/SKILL.md" → spike/SKILL.md} +0 -0
- /package/src/skills/builtin/{/352/262/200/354/202/254-/353/250/274/354/240/200/SKILL.md" → test-first/SKILL.md} +0 -0
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)
|
|
@@ -106,6 +106,14 @@ deel # start working in the current folder
|
|
|
106
106
|
No account, no sign-up, no telemetry. If you already run Ollama or LM Studio,
|
|
107
107
|
`deel setup` finds it — `deel scan` lists every local runtime and model on the machine.
|
|
108
108
|
|
|
109
|
+
Routing picks the mode, the mode decides which tools the model is even shown, and every
|
|
110
|
+
tool call has to pass the mode gate and the approval gate before anything happens:
|
|
111
|
+
|
|
112
|
+
<picture>
|
|
113
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-flow-en-dark.svg">
|
|
114
|
+
<img alt="How one message travels through deel: what you type, routing, the mode's tool list, the model, then the mode gate and the approval gate, the tool run, Verify, and the answer — with results looping back to the model up to the step ceiling" src="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-flow-en-light.svg" width="760">
|
|
115
|
+
</picture>
|
|
116
|
+
|
|
109
117
|
---
|
|
110
118
|
|
|
111
119
|
<details>
|
|
@@ -155,7 +163,7 @@ This page is the **summary**. Each section links to the detail behind it.
|
|
|
155
163
|
| [Speed and spend](docs/en/tuning.md) | Per-stage effort · the prefix cache · context length |
|
|
156
164
|
| [Safety and corporate review](docs/en/safety.md) | Undo · working scope · audit log · the review package |
|
|
157
165
|
| [Configuration](docs/en/config.md) · [Development](docs/en/develop.md) | Env vars · run flags · running the tests · folder layout |
|
|
158
|
-
| [Release notes](docs/en/releases.md) | [1.16.x](docs/en/releases/1.
|
|
166
|
+
| [Release notes](docs/en/releases.md) | [1.16.x](docs/en/releases/1.x.md#116x) · [1.15.x](docs/en/releases/1.x.md#115x) · [1.14.x](docs/en/releases/1.x.md#114x) · [1.13.x](docs/en/releases/1.x.md#113x) · [1.12.x](docs/en/releases/1.x.md#112x) · [1.10.x](docs/en/releases/1.x.md#110x) · [1.9.x](docs/en/releases/1.x.md#19x) · [older](docs/en/releases.md) |
|
|
159
167
|
|
|
160
168
|
---
|
|
161
169
|
|
|
@@ -272,8 +280,10 @@ What you see on screen does not have to. Four screen languages ship: **한국어
|
|
|
272
280
|
> strings that made it *into* the table, and for a long time the tool result summaries and the
|
|
273
281
|
> thinking indicator never did. So a test starts deel in each language and reads the screen:
|
|
274
282
|
> `test/langleak.test.js` starts deel on ten screens — six inside the chat REPL and four that
|
|
275
|
-
> argv reaches on its own (`--help`, `status`, `sessions`, `reset`)
|
|
276
|
-
>
|
|
283
|
+
> argv reaches on its own (`--help`, `status`, `sessions`, `reset`). On the six chat screens a
|
|
284
|
+
> single Korean character fails the test. The four outside the chat still have Korean left, so
|
|
285
|
+
> they are pinned to a number that may only go down — 95 lines today, and `--help` is 73 of them.
|
|
286
|
+
> It also fails on `1 files`, and on a stray `·` left dangling at the end of a line.
|
|
277
287
|
|
|
278
288
|
```bash
|
|
279
289
|
DEEL_LANG=en deel # this run only (also ja, zh)
|
|
@@ -346,6 +356,11 @@ A coding agent ships your whole source to a model. **The address is everything.*
|
|
|
346
356
|
Rather than promising in prose, the code enforces it: `src/safety/network.js` checks every request
|
|
347
357
|
and never builds one for an address that is not on the allow-list.
|
|
348
358
|
|
|
359
|
+
<picture>
|
|
360
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-trust-en-dark.svg">
|
|
361
|
+
<img alt="Where your text can go: your working folder and .deel/ stay inside this machine, and only four paths cross the line — the model gateway, WebFetch, plugin downloads and MCP servers. The key, the audit log, the undo history and your conversations never cross it, and sealed mode locks the last three" src="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-trust-en-light.svg" width="900">
|
|
362
|
+
</picture>
|
|
363
|
+
|
|
349
364
|
```
|
|
350
365
|
[A] Model gateway ────── the only path your source travels
|
|
351
366
|
One address, set in `setup`. Switching models closes the previous one.
|
|
@@ -374,7 +389,7 @@ deel --offline
|
|
|
374
389
|
The destination is printed at the top of every session:
|
|
375
390
|
|
|
376
391
|
```
|
|
377
|
-
deel
|
|
392
|
+
deel 2.0.0 ⌂ inside
|
|
378
393
|
Sends to this machine 127.0.0.1:11434 ← nowhere else
|
|
379
394
|
```
|
|
380
395
|
|
|
@@ -400,7 +415,7 @@ leaves the company."
|
|
|
400
415
|
Nothing is collected or transmitted. No telemetry, no usage stats, no crash reporting.
|
|
401
416
|
Conversation history, undo snapshots and config live only in `.deel/` inside your working folder.
|
|
402
417
|
|
|
403
|
-
> Verified by
|
|
418
|
+
> Verified by 350 checks in `npm test` (network + web + mcp), including bringing up a real
|
|
404
419
|
> server and confirming that **not a single request reaches it** when it is not allow-listed,
|
|
405
420
|
> and that an MCP server **never starts** under `--offline`.
|
|
406
421
|
|
|
@@ -441,7 +456,7 @@ So an unrecognized key is never guessed at; you are asked.
|
|
|
441
456
|
|
|
442
457
|
Bedrock asks for a region — five including Seoul (`ap-northeast-2`), plus
|
|
443
458
|
"enter it yourself." Claude has a different wire shape, absorbed in six places
|
|
444
|
-
([1.7.0 release notes](docs/en/releases/1.
|
|
459
|
+
([1.7.0 release notes](docs/en/releases/1.x.md#170)).
|
|
445
460
|
|
|
446
461
|
### Going outside masks secrets in file contents too
|
|
447
462
|
|
|
@@ -539,6 +554,7 @@ $ deel scan
|
|
|
539
554
|
| `deel scan --save` | Register everything found |
|
|
540
555
|
| `deel scan --ports 9000,9100` | Extra ports to probe |
|
|
541
556
|
| `deel scan --host <addr>` | Defaults to `127.0.0.1` |
|
|
557
|
+
| `deel scan --key <key>` | For a local server that wants a key |
|
|
542
558
|
|
|
543
559
|
Switch with `/model` mid-conversation — **the conversation carries over.**
|
|
544
560
|
|
|
@@ -656,6 +672,11 @@ Hand a small model 400 steps and it just runs on past the point where its window
|
|
|
656
672
|
In read-only modes, `Write`, `Edit` and `Bash` are **never sent to the model at all.**
|
|
657
673
|
It is not asked politely not to edit — models forget requests. A tool that isn't there can't be used.
|
|
658
674
|
|
|
675
|
+
<picture>
|
|
676
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-modes-en-dark.svg">
|
|
677
|
+
<img alt="All eight work modes on one sheet: each mode's glyph and name, whether it can change files, its thinking depth and effort, its step ceiling on a 128k model, and what it is for" src="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-modes-en-light.svg" width="800">
|
|
678
|
+
</picture>
|
|
679
|
+
|
|
659
680
|
Don't confuse this with `/mode`. They are separate axes:
|
|
660
681
|
|
|
661
682
|
- `/mode` — **how much it asks you** (auto · confirm · strict)
|
|
@@ -835,10 +856,28 @@ Starting a server means opening your disk to somebody else.
|
|
|
835
856
|
|
|
836
857
|
## Skills and plugins
|
|
837
858
|
|
|
838
|
-
**deel does not carry
|
|
839
|
-
whatever is there.
|
|
859
|
+
**deel does not carry anybody else's skills.** On startup it scans the machine it is running on
|
|
860
|
+
and uses whatever is there.
|
|
861
|
+
|
|
862
|
+
**It does carry seven ways of working.** A freshly issued corporate PC has no
|
|
863
|
+
`~/.claude/skills` and no plugins. With zero methodology there the model made its own up every
|
|
864
|
+
time, and that is where the thin, did-only-what-was-asked answers came from.
|
|
865
|
+
|
|
866
|
+
| Skill | When |
|
|
867
|
+
|---|---|
|
|
868
|
+
| `깊이있게-만들기` (build deep) | Hardening, a report, an announcement — so it does not stop at the minimum |
|
|
869
|
+
| `끝까지-하기` (finish all) | When the task is several pieces. What was skipped gets said |
|
|
870
|
+
| `차근차근-디버깅` (debug step by step) | Reproduce → narrow → cause → fix → prove |
|
|
871
|
+
| `검사-먼저` (test first) | A failing test before the fix |
|
|
872
|
+
| `찔러보기` (spike) | When it is unclear whether something works: timebox a small probe, then throw it away |
|
|
873
|
+
| `코드-줄이기` (simplify code) | Same behaviour, easier to read |
|
|
874
|
+
| `스스로-검토` (self review) | Before saying it is done. What could not be measured gets said too |
|
|
875
|
+
|
|
876
|
+
The list costs 404 tokens on every request (5% of an 8k window). Bodies go out only when `Skill`
|
|
877
|
+
asks for one. Write your own under the same name and yours wins — what is carried sits lowest.
|
|
840
878
|
|
|
841
879
|
```
|
|
880
|
+
carried (inside the package) ← lowest
|
|
842
881
|
project ./.deel/skills ./.claude/skills ./.deel/commands ./.claude/commands
|
|
843
882
|
user ~/.deel/skills ~/.claude/skills ~/.claude/commands
|
|
844
883
|
plugins ~/.claude/plugins/** ~/.deel/plugins/**
|
|
@@ -1219,12 +1258,12 @@ deel pack --out deel-import.zip
|
|
|
1219
1258
|
|
|
1220
1259
|
```
|
|
1221
1260
|
✓ deel-import.zip
|
|
1222
|
-
|
|
1261
|
+
175 files · 1605.9KB
|
|
1223
1262
|
|
|
1224
1263
|
Dependencies 0
|
|
1225
1264
|
Install scripts none
|
|
1226
1265
|
External imports 0
|
|
1227
|
-
Network calls
|
|
1266
|
+
Network calls 8 sites (configured address only)
|
|
1228
1267
|
Ports opened 1 site (/preview only)
|
|
1229
1268
|
```
|
|
1230
1269
|
|
|
@@ -1234,7 +1273,7 @@ audit-log spec to write SIEM ingestion rules.
|
|
|
1234
1273
|
|
|
1235
1274
|
| File | What |
|
|
1236
1275
|
|---|---|
|
|
1237
|
-
| `import-review.txt` | Dependencies · install scripts · **every network and process-spawn call site found by scanning the source** (file:line) · the
|
|
1276
|
+
| `import-review.txt` | Dependencies · install scripts · **every network and process-spawn call site found by scanning the source** (file:line) · the four outbound lanes · SHA-256 per file |
|
|
1238
1277
|
| `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 |
|
|
1239
1278
|
| `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 |
|
|
1240
1279
|
|
|
@@ -1295,12 +1334,13 @@ Stored in `~/.deel/config.json`. A `.deel/config.json` in the project folder tak
|
|
|
1295
1334
|
## Development
|
|
1296
1335
|
|
|
1297
1336
|
```bash
|
|
1298
|
-
npm test Full suite (
|
|
1337
|
+
npm test Full suite (13,905 checks; a few are TTY-dependent)
|
|
1299
1338
|
npm run coverage Which lines the tests actually execute
|
|
1300
1339
|
npm run verify Import + network checks only
|
|
1301
1340
|
npm run bench Edit success rate
|
|
1302
1341
|
npm run demo See what the UI actually looks like
|
|
1303
|
-
npm run check Syntax check every file
|
|
1342
|
+
npm run check Syntax check every file · line endings in the published package
|
|
1343
|
+
npm run mutate Whether the tests actually guard (break a line on purpose)
|
|
1304
1344
|
```
|
|
1305
1345
|
|
|
1306
1346
|
Tests run against a **fake gateway**, so the loop, streaming, tool execution, undo and compaction
|
|
@@ -1315,30 +1355,30 @@ so one run tells you everything.
|
|
|
1315
1355
|
|
|
1316
1356
|
| Suite | Checks | Covers |
|
|
1317
1357
|
|---|---|---|
|
|
1318
|
-
| `smoke` |
|
|
1319
|
-
| `loop` |
|
|
1320
|
-
| `guard` |
|
|
1321
|
-
| `network` |
|
|
1322
|
-
| `web` |
|
|
1323
|
-
| `abort` · `steer` | 22 ·
|
|
1324
|
-
| `parallel` |
|
|
1325
|
-
| `cli` · `oneshot` |
|
|
1326
|
-
| `setup` |
|
|
1327
|
-
| `detect` |
|
|
1328
|
-
| `modes` · `route` |
|
|
1329
|
-
| `ctxsize` |
|
|
1330
|
-
| `commands` · `commands-more` |
|
|
1331
|
-
| `ui` · `ui2` |
|
|
1332
|
-
| `encoding` · `xlsx` |
|
|
1333
|
-
| `compact` |
|
|
1334
|
-
| `stuck` · `undo` |
|
|
1335
|
-
| `store` |
|
|
1336
|
-
| `scan` |
|
|
1337
|
-
| `plugins` |
|
|
1338
|
-
| `exitcode` · `doorparity` | 7 ·
|
|
1339
|
-
| `no-bundle` |
|
|
1340
|
-
| `edit-bench` |
|
|
1341
|
-
| `mutate` |
|
|
1358
|
+
| `smoke` | 25 | Tools, scope, undo, audit log |
|
|
1359
|
+
| `loop` | 85 | Agent loop, streaming, tool calls |
|
|
1360
|
+
| `guard` | 323 | **What it refuses to do** — denied edits, unknown tools, repeated mutations, out-of-scope writes, the `.deel` fence |
|
|
1361
|
+
| `network` | 110 | Nothing escapes the configured address |
|
|
1362
|
+
| `web` | 99 | Web reads stay read-only |
|
|
1363
|
+
| `abort` · `steer` | 22 · 18 | Ctrl+C leaves the conversation valid · a line typed mid-turn rides the next call |
|
|
1364
|
+
| `parallel` | 41 | Read-only tools run together; checklists |
|
|
1365
|
+
| `cli` · `oneshot` | 124 · 220 | **Spawns the real `deel`** and drives it to completion · batch mode and exit codes |
|
|
1366
|
+
| `setup` | 109 | First-run wizard, driven through a fake TTY |
|
|
1367
|
+
| `detect` | 123 | Identifying shape and auth from one address |
|
|
1368
|
+
| `modes` · `route` | 207 · 221 | Work modes; auto-switching from Auto |
|
|
1369
|
+
| `ctxsize` | 71 | Reading context length off the model |
|
|
1370
|
+
| `commands` · `commands-more` | 274 · 195 | Every slash command |
|
|
1371
|
+
| `ui` · `ui2` | 126 · 40 | Password masking, CJK width, status line, session list, Excel→text |
|
|
1372
|
+
| `encoding` · `xlsx` | 159 · 106 | Legacy-encoding detection; Excel reading |
|
|
1373
|
+
| `compact` | 153 | Summary folding, pairing intact, graceful fallback |
|
|
1374
|
+
| `stuck` · `undo` | 76 · 138 | Telling spinning apart from real progress · shell-written files are undoable too |
|
|
1375
|
+
| `store` | 135 | Session persistence, resume, crash recovery |
|
|
1376
|
+
| `scan` | 66 | Distinguishing multiple runtimes |
|
|
1377
|
+
| `plugins` | 197 | Plugin fetch/pack, ZIP/TAR |
|
|
1378
|
+
| `exitcode` · `doorparity` | 7 · 19 | The printed exit-code table is real · all **four** doors hand out the same thing |
|
|
1379
|
+
| `no-bundle` | 28 | Nothing foreign in the published package; test-file hygiene |
|
|
1380
|
+
| `edit-bench` | 15 cases | Edit success rate |
|
|
1381
|
+
| `mutate` | 1,656 mutants | **Whether the tests actually guard** — break the line on purpose, check it turns red |
|
|
1342
1382
|
|
|
1343
1383
|
> **More** — Coverage · Layout
|
|
1344
1384
|
>
|
|
@@ -1350,49 +1390,47 @@ so one run tells you everything.
|
|
|
1350
1390
|
|
|
1351
1391
|
| Version | What changed |
|
|
1352
1392
|
|---|---|
|
|
1353
|
-
| [
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
|
1373
|
-
|
|
1374
|
-
| [1.
|
|
1375
|
-
| [1.
|
|
1376
|
-
| [1.
|
|
1377
|
-
| [1.17.
|
|
1378
|
-
| [1.
|
|
1379
|
-
| [1.
|
|
1380
|
-
| [1.
|
|
1381
|
-
| [1.
|
|
1382
|
-
| [1.
|
|
1383
|
-
|
|
|
1384
|
-
|
|
|
1385
|
-
|
|
|
1386
|
-
|
|
|
1387
|
-
|
|
|
1388
|
-
| [1.
|
|
1389
|
-
|
|
|
1390
|
-
|
|
|
1391
|
-
|
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
The five most recent are listed here. Every version, and why each thing changed, is in the **[release notes](docs/en/releases.md)**.
|
|
1393
|
+
| **[2.0.0](docs/en/releases/2.0.md#200)** | Every fence we said was there, checked for whether it actually holds — everything that changed, where and how it was fixed, and how it was found (CHA) |
|
|
1394
|
+
|
|
1395
|
+
<p align="center">
|
|
1396
|
+
<picture>
|
|
1397
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-cha-en-dark.svg">
|
|
1398
|
+
<img alt="The nine steps of one CHA round, animated: hunt, brief, second eyes, adjudicate, red test first, fix, mutate, gate, record — a marker walks them one at a time and step 9 returns to step 1. Three models stand at step 3: Claude writes, Gemini and codex only read. With reduced motion it falls back to a still frame" src="https://raw.githubusercontent.com/jysvai/deel-local-cli/main/docs/assets/fig-cha-en-light.svg" width="860">
|
|
1399
|
+
</picture>
|
|
1400
|
+
</p>
|
|
1401
|
+
|
|
1402
|
+
The 2.0.0 fixes did not come from reading the code. They came from repeating one
|
|
1403
|
+
procedure — **CHA, Cyclic Hostile Harnessing** — eighteen times. One lap of this ring
|
|
1404
|
+
is one round, and three models take turns at step 3.
|
|
1405
|
+
|
|
1406
|
+
2.0.0 is the large release where the name changed. Everything before it — 1.2.0 through 1.20.13 —
|
|
1407
|
+
is in the **[1.x archive](docs/en/releases/1.x.md)**, one line per release.
|
|
1408
|
+
|
|
1409
|
+
<details>
|
|
1410
|
+
<summary>The 1.x lines at a glance (18 lines)</summary>
|
|
1411
|
+
|
|
1412
|
+
| Line | What changed |
|
|
1413
|
+
|---|---|
|
|
1414
|
+
| [1.20.x](docs/en/releases/1.x.md#120x) | One space hid the whole instruction |
|
|
1415
|
+
| [1.19.x](docs/en/releases/1.x.md#119x) | Getting one side right broke the other — thirteen rounds of second review, and the gap left where a fence moved |
|
|
1416
|
+
| [1.18.x](docs/en/releases/1.x.md#118x) | Having a rule is not the same as the rule firing — what green was not guarding, and a second reviewer |
|
|
1417
|
+
| [1.17.x](docs/en/releases/1.x.md#117x) | The things that blocked it from getting inside a company — and the company writes what to do |
|
|
1418
|
+
| [1.16.x](docs/en/releases/1.x.md#116x) | A deep request no longer lands in a shallow mode — and designs and documents open as they are |
|
|
1419
|
+
| [1.15.x](docs/en/releases/1.x.md#115x) | Stop doing the same thing twice — nine quietly expensive places |
|
|
1420
|
+
| [1.14.x](docs/en/releases/1.x.md#114x) | A machine now checks that what we wrote down is true |
|
|
1421
|
+
| [1.13.x](docs/en/releases/1.x.md#113x) | Every place deel touches someone else's endpoint, re-examined |
|
|
1422
|
+
| [1.12.x](docs/en/releases/1.x.md#112x) | The same head was going out on every single request |
|
|
1423
|
+
| [1.10.x](docs/en/releases/1.x.md#110x) | ESC actually stops, and a full context carries on |
|
|
1424
|
+
| [1.9.x](docs/en/releases/1.x.md#19x) | The screen reads, and vendor APIs understand what you set |
|
|
1425
|
+
| [1.8.x](docs/en/releases/1.x.md#18x) | A full day against a gateway that hands out one-hour tokens |
|
|
1426
|
+
| [1.7.x](docs/en/releases/1.x.md#17x) | Local stays local; it goes out only when you say so |
|
|
1427
|
+
| [1.6.x](docs/en/releases/1.x.md#16x) | The places that made a turn spin in circles |
|
|
1428
|
+
| [1.5.x](docs/en/releases/1.x.md#15x) | A 5MB document showed 8 lines out of 919 |
|
|
1429
|
+
| [1.4.x](docs/en/releases/1.x.md#14x) | The README explains what's different, and the review report gets its missing line |
|
|
1430
|
+
| [1.3.x](docs/en/releases/1.x.md#13x) | evidence instead of claims, the editor instead of a terminal |
|
|
1431
|
+
| [1.2.x](docs/en/releases/1.x.md#12x) | so the conversation doesn't break |
|
|
1432
|
+
|
|
1433
|
+
</details>
|
|
1396
1434
|
|
|
1397
1435
|
---
|
|
1398
1436
|
|