deel-local-cli 1.1.0 → 1.2.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 +347 -9
- package/README.md +317 -6
- package/package.json +2 -2
- package/src/agent/budget.js +0 -14
- package/src/agent/compact.js +87 -0
- package/src/agent/evolve.js +213 -0
- package/src/agent/loop.js +38 -1
- package/src/agent/modes.js +2 -0
- package/src/agent/route.js +55 -3
- package/src/agent/session.js +145 -1
- package/src/agent/threads.js +154 -0
- package/src/backend/http.js +41 -4
- package/src/commands.js +268 -4
- package/src/config.js +10 -1
- package/src/oneshot.js +4 -0
- package/src/preview/serve.js +326 -0
- package/src/repl.js +210 -34
- package/src/safety/guard.js +37 -2
- package/src/safety/undo.js +1 -1
- package/src/setup.js +2 -2
- package/src/skills/builtin//352/262/200/354/202/254-/353/250/274/354/240/200/SKILL.md +64 -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 +78 -0
- package/src/skills/builtin//353/201/235/352/271/214/354/247/200-/355/225/230/352/270/260/SKILL.md +65 -0
- package/src/skills/builtin//354/212/244/354/212/244/353/241/234-/352/262/200/355/206/240/SKILL.md +74 -0
- package/src/skills/builtin//354/260/224/353/237/254/353/263/264/352/270/260/SKILL.md +59 -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 +73 -0
- package/src/skills/builtin//354/275/224/353/223/234-/354/244/204/354/235/264/352/270/260/SKILL.md +66 -0
- package/src/skills/discover.js +18 -3
- 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 +1 -1
- package/src/tools/todo.js +19 -3
- package/src/ui/ansi.js +6 -2
- package/src/ui/inputbox.js +37 -8
- package/src/ui/md.js +227 -0
- package/src/ui/motion.js +212 -0
- package/src/ui/prompt.js +1 -1
- package/src/ui/screen.js +1 -1
- package/src/ui/status.js +14 -1
- package/src/ui/working.js +0 -3
- package/src/ui/wrap.js +1 -8
package/README.en.md
CHANGED
|
@@ -53,6 +53,7 @@ Zero dependencies · Node 20+ · Exactly one place your source can go
|
|
|
53
53
|
- [Simple vs developer](#simple-vs-developer)
|
|
54
54
|
- [Tools](#tools)
|
|
55
55
|
- [Korean text and Excel](#korean-text-and-excel)
|
|
56
|
+
- [Serving what you built](#serving-what-you-built)
|
|
56
57
|
- [Skills and plugins](#skills-and-plugins)
|
|
57
58
|
- [Reasoning effort](#reasoning-effort)
|
|
58
59
|
- [Auto-compaction](#auto-compaction)
|
|
@@ -63,6 +64,9 @@ Zero dependencies · Node 20+ · Exactly one place your source can go
|
|
|
63
64
|
- [Configuration](#configuration)
|
|
64
65
|
- [Troubleshooting](#troubleshooting)
|
|
65
66
|
- [Development](#development)
|
|
67
|
+
- [Release notes](#release-notes)
|
|
68
|
+
|
|
69
|
+
Each section is open at the summary. Click **▸ More** to unfold the detail behind it.
|
|
66
70
|
|
|
67
71
|
---
|
|
68
72
|
|
|
@@ -203,6 +207,9 @@ $ deel scan
|
|
|
203
207
|
|
|
204
208
|
Switch with `/model` mid-conversation — **the conversation carries over.**
|
|
205
209
|
|
|
210
|
+
<details>
|
|
211
|
+
<summary><b>More</b> — It adapts to whatever model is attached · Small windows get a smaller fixed share · On startup it reads what kind of project this folder is</summary>
|
|
212
|
+
|
|
206
213
|
### It adapts to whatever model is attached
|
|
207
214
|
|
|
208
215
|
If you move between models, any number tuned for one of them is wrong for all the others.
|
|
@@ -333,6 +340,8 @@ can be recovered with one `Glob`; "tests run with `npm test`" requires opening
|
|
|
333
340
|
|
|
334
341
|
7ms on a folder with 600 files (`test/project.test.js`).
|
|
335
342
|
|
|
343
|
+
</details>
|
|
344
|
+
|
|
336
345
|
---
|
|
337
346
|
|
|
338
347
|
## Slash commands
|
|
@@ -348,6 +357,8 @@ Names follow Claude Code / Codex conventions.
|
|
|
348
357
|
| `/out [number\|auto]` | Cap on a **single reply** — raise it when large files get cut |
|
|
349
358
|
| `/compact` | Summarise and fold older turns |
|
|
350
359
|
| `/clear` | Clear the conversation (keeps link and rules) |
|
|
360
|
+
| `/thread [new\|fork\|close\|n]` | Conversation threads — side work in its own context. Link and undo stay shared |
|
|
361
|
+
| `/learned [clear]` | What deel has picked up on its own — commands that work here, this model's habits |
|
|
351
362
|
| `/model` | Switch connection / model |
|
|
352
363
|
| `/think <level>` | Reasoning level (`off·low·medium·high·max`) |
|
|
353
364
|
| `/think 배분 <profile>` | Per-stage profile (`even·save·deep`) |
|
|
@@ -359,6 +370,7 @@ Names follow Claude Code / Codex conventions.
|
|
|
359
370
|
| `/level [level]` | How much to show (`쉬움` simple · `개발자` developer) |
|
|
360
371
|
| `/undo [turns]` | Revert file changes |
|
|
361
372
|
| `/diff [file]` | Files changed this session, and the changed lines |
|
|
373
|
+
| `/preview [folder\|file\|off]` | Serve what you built, right here — a browser opens with it |
|
|
362
374
|
| `/tools` | Available tools |
|
|
363
375
|
| `/skills [query\|all\|off]` | Browse, search, load skills |
|
|
364
376
|
| `/plugin [install\|remove\|pack]` | Manage plugins |
|
|
@@ -390,6 +402,9 @@ the conversation.
|
|
|
390
402
|
|
|
391
403
|
Korean IME composition, paste, `Ctrl+A/E` and backspace all keep working.
|
|
392
404
|
|
|
405
|
+
<details>
|
|
406
|
+
<summary><b>More</b> — Attaching a file with @ · Interrupting</summary>
|
|
407
|
+
|
|
393
408
|
### Attaching a file with `@`
|
|
394
409
|
|
|
395
410
|
Write `@` followed by a path and that file is sent along with your message.
|
|
@@ -448,6 +463,8 @@ session. Tools already running finish; **tools not yet started never run.**
|
|
|
448
463
|
|
|
449
464
|
Pressing Ctrl+C again on an empty line quits.
|
|
450
465
|
|
|
466
|
+
</details>
|
|
467
|
+
|
|
451
468
|
---
|
|
452
469
|
|
|
453
470
|
## Work modes
|
|
@@ -476,6 +493,9 @@ Don't confuse this with `/mode`. They are separate axes:
|
|
|
476
493
|
If you have explicitly set `/think` or `/mode`, your choice wins. A work mode never
|
|
477
494
|
overrides something a person chose.
|
|
478
495
|
|
|
496
|
+
<details>
|
|
497
|
+
<summary><b>More</b> — Switching by itself (Auto mode)</summary>
|
|
498
|
+
|
|
479
499
|
### Switching by itself (Auto mode)
|
|
480
500
|
|
|
481
501
|
You start in **Auto**. Nothing has been decided about what kind of work is coming.
|
|
@@ -518,6 +538,8 @@ A `~` in the status line means it switched by itself; no `~` means you chose it.
|
|
|
518
538
|
|
|
519
539
|
Choosing a mode yourself **pins** it. `/auto` (or `/work auto`) hands the wheel back.
|
|
520
540
|
|
|
541
|
+
</details>
|
|
542
|
+
|
|
521
543
|
---
|
|
522
544
|
|
|
523
545
|
## Simple vs developer
|
|
@@ -539,6 +561,9 @@ Two things matter here:
|
|
|
539
561
|
- **Beginners do not get fewer safeguards.** Undo, workspace scope and dangerous-command
|
|
540
562
|
blocking are identical. A beginner needs the undo more, not less.
|
|
541
563
|
|
|
564
|
+
<details>
|
|
565
|
+
<summary><b>More</b> — The input box · You don't have to type the whole command · The box stays while it works · The picture on the left moves too and 1 more</summary>
|
|
566
|
+
|
|
542
567
|
### The input box
|
|
543
568
|
|
|
544
569
|
Launched in a terminal, **the conversation scrolls normally and an input box is pinned at
|
|
@@ -652,21 +677,46 @@ more than a blank screen. One turn reads like this:
|
|
|
652
677
|
(turning it over) (looking at files) (writing code) (writing the answer)
|
|
653
678
|
```
|
|
654
679
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
|
658
|
-
|
|
659
|
-
|
|
|
660
|
-
| `
|
|
661
|
-
| `
|
|
662
|
-
|
|
|
663
|
-
|
|
|
680
|
+
The phrases are Korean, because the interface is. Here is what each set means:
|
|
681
|
+
|
|
682
|
+
| Activity | On screen | Roughly |
|
|
683
|
+
|---|---|---|
|
|
684
|
+
| Thinking | 머리 굴리는 중 · 어떻게 할지 궁리하는 중 · 수 읽는 중 · 따져 보는 중 | turning it over · working out how · reading ahead · weighing it up |
|
|
685
|
+
| `Read` `Grep` `Glob` | 파일 들여다보는 중 · 코드 훑는 중 · 어디 있나 뒤지는 중 · 단서 찾는 중 | looking at files · skimming code · hunting for where it is · looking for a clue |
|
|
686
|
+
| `Write` `Edit` `Append` | 코드 짜는 중 · 고쳐 넣는 중 · 손보는 중 · 한 줄씩 옮기는 중 | writing code · patching it in · touching it up · moving it a line at a time |
|
|
687
|
+
| `Bash` | 명령 돌리는 중 · 터미널 두드리는 중 · 결과 기다리는 중 | running a command · at the terminal · waiting on output |
|
|
688
|
+
| `WebFetch` | 문서 찾아보는 중 · 읽어 오는 중 | looking up docs · fetching |
|
|
689
|
+
| Answering | 답 쓰는 중 · 정리해서 말하는 중 | writing the answer · putting it together |
|
|
690
|
+
| **Past 45 seconds** | 아직 하는 중 · 조금만 더 · 생각보다 오래 걸리는 중 | still going · nearly there · taking longer than expected |
|
|
664
691
|
|
|
665
692
|
Within a category the phrase advances every 4 seconds — text frozen for 30 seconds reads as
|
|
666
693
|
hung too. On the right: **elapsed time**, and while the model is reasoning, **how many
|
|
667
694
|
characters of thinking have arrived**. One number that genuinely increases is what turns
|
|
668
695
|
"still alive" from a claim into a fact.
|
|
669
696
|
|
|
697
|
+
### The picture on the left moves too
|
|
698
|
+
|
|
699
|
+
What spins next to the phrase is not a spinner — it is **a small drawing of the work being
|
|
700
|
+
done right now**.
|
|
701
|
+
|
|
702
|
+
| Doing | One cycle | The picture |
|
|
703
|
+
|---|---|---|
|
|
704
|
+
| Thinking | `⠀⠶⠀` `⠰⣿⠆` `⢾⣿⡷` `⠰⣿⠆` | swells and shrinks |
|
|
705
|
+
| Reading | `⠉⠉⠉` `⠒⠒⠒` `⠤⠤⠤` `⣀⣀⣀` | a scanning line travels down |
|
|
706
|
+
| Writing | `⡼⠭⠧` `⠼⡯⠧` `⠼⠿⡧` `⠼⡭⠧` | **a laptop typing** |
|
|
707
|
+
| Commands | `⠉⠀⠀` `⠉⠈⠀` `⠛⠊⠀` `⠿⠮⠄` | output piles up a line at a time |
|
|
708
|
+
| Answering | `⠉⠀⠀` `⠛⠉⠀` `⠿⠛⠉` `⣿⠿⠛` | text fills up |
|
|
709
|
+
| Web | `⣀⣀⣀` `⣤⣀⣀` `⣶⣤⣀` `⣿⣶⣤` | signal bars grow |
|
|
710
|
+
| Compacting | `⣿⣿⣿` `⣶⣶⣶` `⣤⣤⣤` `⣀⣀⣀` | pressed down into one line |
|
|
711
|
+
| Past 45 seconds | `⠶⠀⠀` `⠰⠆⠀` `⠀⠶⠀` `⠀⠰⠆` | back and forth — "waiting" |
|
|
712
|
+
|
|
713
|
+
Braille only. One braille cell is **2 wide by 4 dots tall**, so three cells make a 6×4 grid
|
|
714
|
+
that is exactly three columns in any terminal. Emoji and `●` `▪` include glyphs that East
|
|
715
|
+
Asian locales measure as two columns, which knocks the border out of line every 90ms.
|
|
716
|
+
|
|
717
|
+
If the drawing does not render, or you use a screen reader, `DEEL_NO_MOTION=1` turns it off
|
|
718
|
+
and you get the old single-cell spinner.
|
|
719
|
+
|
|
670
720
|
### What gets asked, and what just happens
|
|
671
721
|
|
|
672
722
|
Whether your files change **with or without being asked** is the one thing that has to be
|
|
@@ -706,6 +756,8 @@ press only makes it ask more; it never drops you into "changes files unasked" in
|
|
|
706
756
|
> approval indicator off the line entirely. Now **the model name shortens first** — you
|
|
707
757
|
> already know what you are running; whether your files change unasked is what you need now.
|
|
708
758
|
|
|
759
|
+
</details>
|
|
760
|
+
|
|
709
761
|
---
|
|
710
762
|
|
|
711
763
|
## Tools
|
|
@@ -736,6 +788,9 @@ Seven tools here are not in Claude Code — `Append`, `Recall`, `Remember`, `Out
|
|
|
736
788
|
so a test stops you every time the list grows (`test/loop.test.js`). The last four earned
|
|
737
789
|
their cost; here is why.
|
|
738
790
|
|
|
791
|
+
<details>
|
|
792
|
+
<summary><b>More</b> — Outline · Verify · Task · Commands that never finish and 9 more</summary>
|
|
793
|
+
|
|
739
794
|
### Seeing a project's shape cheaply — `Outline`
|
|
740
795
|
|
|
741
796
|
There used to be only two ways to understand someone else's code. `Glob` gives you paths;
|
|
@@ -1126,10 +1181,18 @@ last edit did. That original state comes from the earliest undo snapshot.
|
|
|
1126
1181
|
`/diff` is **in the simple level's command list.** As long as `auto` edits without asking,
|
|
1127
1182
|
a beginner needs a way to see what changed more than anyone.
|
|
1128
1183
|
|
|
1184
|
+
</details>
|
|
1185
|
+
|
|
1129
1186
|
---
|
|
1130
1187
|
|
|
1131
1188
|
## Korean text and Excel
|
|
1132
1189
|
|
|
1190
|
+
**A file saved as CP949 is written back as CP949.** The encoding is never changed.
|
|
1191
|
+
Excel (`.xlsx`) is read as CSV — read-only.
|
|
1192
|
+
|
|
1193
|
+
<details>
|
|
1194
|
+
<summary><b>More</b> — Encoding · Excel</summary>
|
|
1195
|
+
|
|
1133
1196
|
### Encoding — written back the way it was read
|
|
1134
1197
|
|
|
1135
1198
|
Corporate documents are often not UTF-8. Files saved by old Windows Notepad in a legacy
|
|
@@ -1200,6 +1263,55 @@ Extracted intermediate files are deleted after use.
|
|
|
1200
1263
|
> to do instead. Round-tripping a file with formatting, formulas and charts through CSV
|
|
1201
1264
|
> always loses something. Better not to write than to write knowing you'll lose data.
|
|
1202
1265
|
|
|
1266
|
+
</details>
|
|
1267
|
+
|
|
1268
|
+
---
|
|
1269
|
+
|
|
1270
|
+
## Serving what you built
|
|
1271
|
+
|
|
1272
|
+
```
|
|
1273
|
+
❯ /preview
|
|
1274
|
+
|
|
1275
|
+
▶ Serving http://127.0.0.1:56801/
|
|
1276
|
+
showing .
|
|
1277
|
+
Edit a file and the page reloads by itself.
|
|
1278
|
+
Only this machine can open it (127.0.0.1). No other PC can see it.
|
|
1279
|
+
Stop with /preview off · it shuts down when deel exits.
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
A browser opens with it. `/preview <folder>` picks what to serve, `/preview off` stops it.
|
|
1283
|
+
|
|
1284
|
+
**This is not the same as double-clicking the file (`file://`).** Under `file://` everything
|
|
1285
|
+
below is blocked — and the error only shows up in the console while the page stays blank, so
|
|
1286
|
+
you end up suspecting your own code. This is a real HTTP server, so it all works:
|
|
1287
|
+
|
|
1288
|
+
| | `file://` | `/preview` |
|
|
1289
|
+
|---|---|---|
|
|
1290
|
+
| `<script type="module">` · `import` | blocked (CORS) | **works** |
|
|
1291
|
+
| `fetch('./data.json')` | blocked | **works** |
|
|
1292
|
+
| `new Worker(...)` | blocked | **works** |
|
|
1293
|
+
| `WebAssembly.compileStreaming` | blocked (MIME) | **works** |
|
|
1294
|
+
| textures · `getImageData` | tainted canvas | **works** |
|
|
1295
|
+
| `.glb` / `.gltf` (Three.js) | no MIME type → silently not drawn | **works** |
|
|
1296
|
+
|
|
1297
|
+
All seven were run in a real Chrome and confirmed **7/7**.
|
|
1298
|
+
|
|
1299
|
+
Apps with a router (React Router and friends) get the first page back when you reload on a
|
|
1300
|
+
deep link. Never for requests with an extension (`app.js`) though — returning HTML for a
|
|
1301
|
+
missing script dies with `Unexpected token '<'`, which hides the real cause (a typo in a filename).
|
|
1302
|
+
|
|
1303
|
+
### It opens exactly as much as it says
|
|
1304
|
+
|
|
1305
|
+
Starting a server means opening your disk to somebody else.
|
|
1306
|
+
|
|
1307
|
+
- Bound to **`127.0.0.1` only**. `0.0.0.0` is not available at all — on an office network
|
|
1308
|
+
that would let anyone read your source.
|
|
1309
|
+
- Port **0** (the kernel hands out a free one). A fixed port steals someone else's.
|
|
1310
|
+
- Paths cannot leave the working scope. `../` · `%2e%2e` · double encoding · absolute paths ·
|
|
1311
|
+
null bytes · symlinks — eight of these are held shut by tests.
|
|
1312
|
+
- **It only serves.** `POST` · `PUT` · `DELETE` are refused with 405.
|
|
1313
|
+
- It shuts down when `deel` exits.
|
|
1314
|
+
|
|
1203
1315
|
---
|
|
1204
1316
|
|
|
1205
1317
|
## Skills and plugins
|
|
@@ -1215,6 +1327,9 @@ plugins ~/.claude/plugins/** ~/.deel/plugins/**
|
|
|
1215
1327
|
|
|
1216
1328
|
Reads the Claude Code format: `SKILL.md` with YAML front matter, `commands/*.md`, `$ARGUMENTS`.
|
|
1217
1329
|
|
|
1330
|
+
<details>
|
|
1331
|
+
<summary><b>More</b> — Loaded in three stages · Fetching plugins · Deliberately not included</summary>
|
|
1332
|
+
|
|
1218
1333
|
### Loaded in three stages
|
|
1219
1334
|
|
|
1220
1335
|
Loading everything would blow the context window.
|
|
@@ -1247,6 +1362,8 @@ with a licence table — ready to hand to a security reviewer.
|
|
|
1247
1362
|
| sub-agents | Doubles model calls against a gateway quota |
|
|
1248
1363
|
| MCP | A separate protocol; a project of its own |
|
|
1249
1364
|
|
|
1365
|
+
</details>
|
|
1366
|
+
|
|
1250
1367
|
---
|
|
1251
1368
|
|
|
1252
1369
|
## Reasoning effort
|
|
@@ -1295,6 +1412,9 @@ That second-to-last line exists for a reason: **when all three caps are equal, i
|
|
|
1295
1412
|
only thing that says whether that is correct.** A low known cap makes them equal, and that
|
|
1296
1413
|
is fine. For a while all three read `16,384` always — which meant the table said nothing.
|
|
1297
1414
|
|
|
1415
|
+
<details>
|
|
1416
|
+
<summary><b>More</b> — Context length is read off the model · /out · Truncated tool calls</summary>
|
|
1417
|
+
|
|
1298
1418
|
### Context length is read off the model
|
|
1299
1419
|
|
|
1300
1420
|
This one number sizes the whole program: how many files fit in one read, when the
|
|
@@ -1428,6 +1548,8 @@ One silently swallowed value produced all of that. What happens now:
|
|
|
1428
1548
|
spinning one. What is counted here is not steps but **how many times the same tool failed for
|
|
1429
1549
|
the same reason.**
|
|
1430
1550
|
|
|
1551
|
+
</details>
|
|
1552
|
+
|
|
1431
1553
|
---
|
|
1432
1554
|
|
|
1433
1555
|
## Auto-compaction
|
|
@@ -1495,6 +1617,9 @@ The model sees it as `mcp__wiki__search`. `/mcp` shows what is attached.
|
|
|
1495
1617
|
**Dependencies stay at zero.** The stdio transport is nothing but newline-delimited JSON-RPC
|
|
1496
1618
|
2.0 over a child process's stdin/stdout, so `child_process` and `JSON` cover it. No SDK.
|
|
1497
1619
|
|
|
1620
|
+
<details>
|
|
1621
|
+
<summary><b>More</b> — But this is somebody else's program</summary>
|
|
1622
|
+
|
|
1498
1623
|
### But this is somebody else's program
|
|
1499
1624
|
|
|
1500
1625
|
This project exists because unapproved software is blocked. Turning on MCP carelessly would
|
|
@@ -1514,6 +1639,8 @@ One server crashing, hanging, or talking nonsense does not affect the others. Fa
|
|
|
1514
1639
|
swallowed — the reason appears in the header, because a silent drop leaves "why is that tool
|
|
1515
1640
|
missing?" unanswerable.
|
|
1516
1641
|
|
|
1642
|
+
</details>
|
|
1643
|
+
|
|
1517
1644
|
---
|
|
1518
1645
|
|
|
1519
1646
|
## Safety
|
|
@@ -1543,6 +1670,9 @@ Undo history stores whole file contents, so repeated edits to large files add up
|
|
|
1543
1670
|
it keeps the **most recent 50 turns** and drops the rest. What you just did is always
|
|
1544
1671
|
undoable; `/status` shows how large the history currently is.
|
|
1545
1672
|
|
|
1673
|
+
<details>
|
|
1674
|
+
<summary><b>More</b> — Files removed through Bash come back too · What it will not read</summary>
|
|
1675
|
+
|
|
1546
1676
|
### Files removed through `Bash` come back too
|
|
1547
1677
|
|
|
1548
1678
|
The safety net covered `Write` and `Edit` only. But a model moving a file reaches for
|
|
@@ -1611,6 +1741,8 @@ the read guard look at the same set. They used to be two copies, and two copies
|
|
|
1611
1741
|
comes when only one of them learns a new name — a folder that is skipped while walking but
|
|
1612
1742
|
readable if you name it directly, which is very hard to explain.
|
|
1613
1743
|
|
|
1744
|
+
</details>
|
|
1745
|
+
|
|
1614
1746
|
---
|
|
1615
1747
|
|
|
1616
1748
|
## Corporate review package
|
|
@@ -1641,6 +1773,9 @@ The bundled review sheet contains:
|
|
|
1641
1773
|
It is generated by scanning the source, not written by hand — hand-written sheets drift from reality.
|
|
1642
1774
|
Use `deel audit` to read it without building a zip.
|
|
1643
1775
|
|
|
1776
|
+
<details>
|
|
1777
|
+
<summary><b>More</b> — Diagnosing a corporate gateway</summary>
|
|
1778
|
+
|
|
1644
1779
|
### Diagnosing a corporate gateway
|
|
1645
1780
|
|
|
1646
1781
|
```bash
|
|
@@ -1662,12 +1797,17 @@ Hand over `report.txt` alone — plain text, no colour codes.
|
|
|
1662
1797
|
|
|
1663
1798
|
Verdict is one of **ready · limited · blocked · unreachable**.
|
|
1664
1799
|
|
|
1800
|
+
</details>
|
|
1801
|
+
|
|
1665
1802
|
---
|
|
1666
1803
|
|
|
1667
1804
|
## Configuration
|
|
1668
1805
|
|
|
1669
1806
|
Stored in `~/.deel/config.json`. A `.deel/config.json` in the project folder takes precedence.
|
|
1670
1807
|
|
|
1808
|
+
<details>
|
|
1809
|
+
<summary><b>More</b> — Supported servers · Environment variables · Flags · Project rules</summary>
|
|
1810
|
+
|
|
1671
1811
|
### Supported servers
|
|
1672
1812
|
|
|
1673
1813
|
| | Example address |
|
|
@@ -1712,6 +1852,8 @@ deel --no-tui Turn the input box off; plain scrolling view (see below
|
|
|
1712
1852
|
If the working folder has `DEEL.md`, `CLAUDE.md` or `AGENTS.md`, it is loaded as project rules.
|
|
1713
1853
|
`/init` scaffolds one.
|
|
1714
1854
|
|
|
1855
|
+
</details>
|
|
1856
|
+
|
|
1715
1857
|
---
|
|
1716
1858
|
|
|
1717
1859
|
## Troubleshooting
|
|
@@ -1777,6 +1919,9 @@ so one run tells you everything.
|
|
|
1777
1919
|
| `no-bundle` | 12 | Nothing foreign in the published package; test-file hygiene |
|
|
1778
1920
|
| `edit-bench` | 20 cases | Edit success rate |
|
|
1779
1921
|
|
|
1922
|
+
<details>
|
|
1923
|
+
<summary><b>More</b> — Coverage · Layout</summary>
|
|
1924
|
+
|
|
1780
1925
|
### Coverage
|
|
1781
1926
|
|
|
1782
1927
|
```bash
|
|
@@ -1797,6 +1942,199 @@ Currently **92% overall** (7,056 of 7,646 lines). Three files are deliberately l
|
|
|
1797
1942
|
| `repl.js` | 77% | The keypress paths — Shift+Tab, Ctrl+C, password entry, paste. Reaching them needs a pty, and a pty is a dependency. What the screen *prints* is measured instead, as a value (`ui` and `tui` suites) |
|
|
1798
1943
|
| `plugins/manage.js` | 79% | The GitHub download path. **Tests not reaching the network** matters more. Folder installs are covered |
|
|
1799
1944
|
|
|
1945
|
+
### Layout
|
|
1946
|
+
|
|
1947
|
+
```
|
|
1948
|
+
bin/deel.js entry point
|
|
1949
|
+
src/
|
|
1950
|
+
repl.js the conversation screen — what a person faces
|
|
1951
|
+
oneshot.js run once and exit (-p)
|
|
1952
|
+
commands.js 35 slash commands
|
|
1953
|
+
setup.js first-run connection setup
|
|
1954
|
+
config.js reading and writing config
|
|
1955
|
+
|
|
1956
|
+
ui/ansi.js colour · East Asian width
|
|
1957
|
+
ui/screen.js picking a screen (line mode / box mode)
|
|
1958
|
+
ui/inputbox.js the box at the bottom — overwrite-in-place, cursor position
|
|
1959
|
+
ui/status.js status line — model, context, mode, approvals
|
|
1960
|
+
ui/working.js working phrases — they follow what is happening
|
|
1961
|
+
ui/motion.js the braille drawing next to the phrase
|
|
1962
|
+
ui/approve.js approval mode display (auto / risky only / everything)
|
|
1963
|
+
ui/diff.js showing what changed, where it changed
|
|
1964
|
+
ui/wrap.js wrapping to width without breaking colour
|
|
1965
|
+
ui/level.js simple vs developer
|
|
1966
|
+
|
|
1967
|
+
agent/loop.js the agent loop
|
|
1968
|
+
agent/session.js conversation state + context accounting
|
|
1969
|
+
agent/modes.js work modes (auto · code · plan · architect · debug · ask · orchestrator)
|
|
1970
|
+
agent/route.js picking the mode from what was said
|
|
1971
|
+
agent/effort.js per-stage reasoning effort
|
|
1972
|
+
agent/budget.js shares that follow the window — lines read, description length, steps
|
|
1973
|
+
agent/project.js working out what kind of project this folder is
|
|
1974
|
+
agent/compact.js summarising compaction
|
|
1975
|
+
agent/store.js saving and resuming conversations
|
|
1976
|
+
agent/recall.js searching past conversations (no index, within budget)
|
|
1977
|
+
agent/memory.js what outlives the conversation
|
|
1978
|
+
agent/mention.js attaching files with `@`
|
|
1979
|
+
|
|
1980
|
+
backend/http.js the single HTTP layer (the only door out)
|
|
1981
|
+
backend/detect.js protocol and auth detection
|
|
1982
|
+
backend/adapter.js absorbing OpenAI/Ollama differences + streaming parser
|
|
1983
|
+
backend/ctxsize.js reading context length off the model
|
|
1984
|
+
backend/probe.js 8 diagnostic checks
|
|
1985
|
+
backend/scan.js scanning for local servers
|
|
1986
|
+
backend/mcp.js attaching outside tools (MCP, stdio)
|
|
1987
|
+
|
|
1988
|
+
tools/index.js 15 tools
|
|
1989
|
+
tools/edit-match.js staged-relaxation edit matching
|
|
1990
|
+
tools/outline.js a file's shape, cheaply
|
|
1991
|
+
tools/verify.js checking what was built
|
|
1992
|
+
tools/task.js splitting big work off
|
|
1993
|
+
tools/jobs.js commands that run in the background
|
|
1994
|
+
tools/todo.js checklists
|
|
1995
|
+
tools/webfetch.js reading the web (read-only)
|
|
1996
|
+
tools/encoding.js writing back in the encoding it was read in
|
|
1997
|
+
tools/xlsx.js Excel → CSV (written here)
|
|
1998
|
+
|
|
1999
|
+
preview/serve.js serving what you built (127.0.0.1 only)
|
|
2000
|
+
skills/discover.js finding skills, commands and plugins on the machine
|
|
2001
|
+
plugins/manage.js installing, removing and packing plugins
|
|
2002
|
+
pack/zip.js ZIP writing (written here, keeps non-ASCII names)
|
|
2003
|
+
pack/tar.js TAR reading (written here)
|
|
2004
|
+
pack/selfpack.js review dossier + source bundle
|
|
2005
|
+
|
|
2006
|
+
safety/network.js the lock on the way out
|
|
2007
|
+
safety/guard.js working scope + dangerous-command blocking
|
|
2008
|
+
safety/undo.js snapshots and undo
|
|
2009
|
+
safety/audit.js recording what happened, and when
|
|
2010
|
+
test/ tests (excluded from the published package)
|
|
2011
|
+
```
|
|
2012
|
+
|
|
2013
|
+
</details>
|
|
2014
|
+
|
|
2015
|
+
---
|
|
2016
|
+
|
|
2017
|
+
## Release notes
|
|
2018
|
+
|
|
2019
|
+
<details>
|
|
2020
|
+
<summary><b>▸ 1.2.0 — so the conversation doesn't break</b> · what changed in six places</summary>
|
|
2021
|
+
|
|
2022
|
+
<br>
|
|
2023
|
+
|
|
2024
|
+
| | Before | After |
|
|
2025
|
+
|---|---|---|
|
|
2026
|
+
| Resuming | a conversation cut mid-tool-call **would not reopen** | unmatched calls are cleared, then it opens |
|
|
2027
|
+
| Counting tokens | it guessed, and stayed wrong | it corrects itself against the server |
|
|
2028
|
+
| Making room | summarising arrived at turn 49 | it holds out to turn **102** |
|
|
2029
|
+
| Side questions | piled up in the main context | live in their own thread |
|
|
2030
|
+
| Yesterday's lesson | vanished when you quit | carries over to the next session |
|
|
2031
|
+
| The answer on screen | `**bold**` showed up as characters | it is drawn |
|
|
2032
|
+
|
|
2033
|
+
<br>
|
|
2034
|
+
|
|
2035
|
+
#### 1. A conversation cut mid-tool-call would not reopen
|
|
2036
|
+
|
|
2037
|
+
Close the window or hit <kbd>Ctrl</kbd>+<kbd>C</kbd> while a tool is running and the saved conversation keeps **a call with no result under it**. Reopen it with `--resume` and the server rejects the mismatch with a 400 — the conversation was written down perfectly well, and you still could not carry on.
|
|
2038
|
+
|
|
2039
|
+
Now the pairs are checked before it opens. Calls with no result go, results with no parent go, and **whatever the model said stays.**
|
|
2040
|
+
|
|
2041
|
+
```
|
|
2042
|
+
$ deel --resume 20260826-140217
|
|
2043
|
+
|
|
2044
|
+
✓ 20260826-140217 — 메시지 48개를 이어 받았습니다.
|
|
2045
|
+
중단된 도구 호출 2개를 걷어냈습니다 — 그때 하던 일은 다시 시켜 주세요.
|
|
2046
|
+
```
|
|
2047
|
+
|
|
2048
|
+
#### 2. It misjudged the room left
|
|
2049
|
+
|
|
2050
|
+
Token counts are estimated from character counts. Mix Korean, code and JSON and that estimate drifts from the truth — so deel folded early with room to spare, or did not fold when there was none and the server refused.
|
|
2051
|
+
|
|
2052
|
+
It now **corrects the multiplier against what the server actually reports** with every answer. One line at the foot of `/context`:
|
|
2053
|
+
|
|
2054
|
+
```
|
|
2055
|
+
서버가 알려 준 실제값에 맞춰 +12% 보정했습니다 (7번 재봄).
|
|
2056
|
+
```
|
|
2057
|
+
|
|
2058
|
+
The multiplier is kept per model, so **the next session starts from it** instead of measuring again from scratch.
|
|
2059
|
+
|
|
2060
|
+
#### 3. Summarising arrived too early
|
|
2061
|
+
|
|
2062
|
+
At 80% of the window, earlier turns get folded into a summary. That **cannot be undone**, and the file contents the reasoning rested on are gone with it.
|
|
2063
|
+
|
|
2064
|
+
There is now a step before it. At 55%, **only older tool results** are folded — the four most recent are left alone, and nothing the model or you said is touched at all.
|
|
2065
|
+
|
|
2066
|
+
```
|
|
2067
|
+
◲ 오래된 도구 결과 6개를 접었습니다 (2,148 토큰을 비움)
|
|
2068
|
+
```
|
|
2069
|
+
|
|
2070
|
+
What was there is left in its place:
|
|
2071
|
+
|
|
2072
|
+
```
|
|
2073
|
+
(접힘) Read(src/runner.js) — 61줄. 자리를 비우려고 내용을 접었습니다. 필요하면 다시 읽으세요.
|
|
2074
|
+
```
|
|
2075
|
+
|
|
2076
|
+
Measured by streaming the same conversation through: summarising is pushed from **turn 49 to turn 102 — 2.1×**.
|
|
2077
|
+
|
|
2078
|
+
#### 4. Side questions polluted the main line
|
|
2079
|
+
|
|
2080
|
+
"Just check this one thing" piles into the main context and stays there long after the checking is done.
|
|
2081
|
+
|
|
2082
|
+
```
|
|
2083
|
+
/thread new 로그확인
|
|
2084
|
+
⑂ 로그확인 갈래로 왔습니다. 빈 대화입니다
|
|
2085
|
+
본줄기로 돌아가려면 /thread 1
|
|
2086
|
+
```
|
|
2087
|
+
|
|
2088
|
+
`fork` carries the conversation so far with you. What threads **keep apart is the messages, the token count and the checklist**; what they **share is the connection, undo and the audit log** — a file changed inside a thread still comes back with `/undo`. The `⑂` marker appears in the status line only once there is more than one thread.
|
|
2089
|
+
|
|
2090
|
+
#### 5. Yesterday's lesson vanished when you quit
|
|
2091
|
+
|
|
2092
|
+
deel could work out that `pnpm` is not on this machine, and lose it the moment you quit. Tomorrow it calls it again, fails again, works around it again.
|
|
2093
|
+
|
|
2094
|
+
```
|
|
2095
|
+
/learned
|
|
2096
|
+
── 겪어 본 것 ──────────────────────────────────────
|
|
2097
|
+
|
|
2098
|
+
이 폴더에서 돌려 본 명령
|
|
2099
|
+
✓ npm test 됨 12 · 안 됨 0
|
|
2100
|
+
✗ pnpm 됨 0 · 안 됨 3
|
|
2101
|
+
|
|
2102
|
+
이 모델에 대해 qwen2.5-coder:7b
|
|
2103
|
+
같이 걸어 본 걸음 86
|
|
2104
|
+
인자가 잘림 14 (16%)
|
|
2105
|
+
토큰 추정 보정 ×1.12
|
|
2106
|
+
|
|
2107
|
+
이 중 프롬프트에 실리는 것
|
|
2108
|
+
- 여기서 되는 명령: `npm test`
|
|
2109
|
+
- 이 PC 에서 안 되는 명령(다시 부르지 마라): `pnpm`
|
|
2110
|
+
```
|
|
2111
|
+
|
|
2112
|
+
**This is not training.** It does not touch the model and it does not hoard conversations — that would only eat context. It counts, and it carries over **only what it has seen twice**, all of it **within 220 tokens**. Something seen once may be a coincidence, and writing a coincidence down as fact sends the model around a road that actually works.
|
|
2113
|
+
|
|
2114
|
+
Commands that work live with the folder (`.deel/배운것.json`); the model's habits live in the config folder. So **move the folder and what it learned about the model comes along.** `/learned 지우기` empties it whenever you want.
|
|
2115
|
+
|
|
2116
|
+
#### 6. The answer showed up as raw characters
|
|
2117
|
+
|
|
2118
|
+
The model speaks Markdown and the screen did not know it, so asterisks, backticks and hashes came through mixed into the prose. You had to re-read it in your head to see what was a heading and what was code.
|
|
2119
|
+
|
|
2120
|
+
```
|
|
2121
|
+
before after
|
|
2122
|
+
▌ ## 고친 것 ▌ ▍ 고친 것
|
|
2123
|
+
▌ **src/runner.js** 의 `console.log` ▌ src/runner.js 의 console.log
|
|
2124
|
+
▌ - [ ] 남은 것: `src/worker.js` ▌ ☐ 남은 것: src/worker.js
|
|
2125
|
+
▌ ```js ▌ ┌──────────────── js
|
|
2126
|
+
▌ log.info('시작', { id }) ▌ │ log.info('시작', { id })
|
|
2127
|
+
▌ |---|---| ▌ ┼────────┼─────────┼
|
|
2128
|
+
```
|
|
2129
|
+
|
|
2130
|
+
Answers arrive in fragments, so a line can only be drawn **once it ends**. But a whole paragraph on one line would leave the screen still for seconds — so once a line grows past the screen width, everything up to there is **streamed raw**. Looking alive comes before looking neat.
|
|
2131
|
+
|
|
2132
|
+
<br>
|
|
2133
|
+
|
|
2134
|
+
Tests 2,532 → **2,578** · 48/48 files. Earlier releases are in the [tags](https://github.com/jysvai/deel-local-cli/tags).
|
|
2135
|
+
|
|
2136
|
+
</details>
|
|
2137
|
+
|
|
1800
2138
|
---
|
|
1801
2139
|
|
|
1802
2140
|
## Licence
|