deel-local-cli 1.8.0 → 1.12.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 (61) hide show
  1. package/README.ko.md +10 -25
  2. package/README.md +43 -51
  3. package/bin/deel.js +56 -13
  4. package/package.json +60 -60
  5. package/src/acp/serve.js +810 -732
  6. package/src/agent/budget.js +156 -153
  7. package/src/agent/compact.js +420 -296
  8. package/src/agent/effort.js +308 -177
  9. package/src/agent/evidence.js +2 -0
  10. package/src/agent/evolve.js +263 -213
  11. package/src/agent/filemem.js +155 -0
  12. package/src/agent/grade.js +51 -1
  13. package/src/agent/loop.js +1707 -1349
  14. package/src/agent/memory.js +156 -152
  15. package/src/agent/mention.js +210 -210
  16. package/src/agent/session.js +1049 -832
  17. package/src/agent/store.js +186 -9
  18. package/src/agent/threads.js +26 -1
  19. package/src/backend/adapter.js +1159 -615
  20. package/src/backend/cachemark.js +150 -0
  21. package/src/backend/detect.js +327 -288
  22. package/src/backend/learn.js +24 -0
  23. package/src/backend/mcp.js +96 -5
  24. package/src/backend/probe.js +131 -61
  25. package/src/backend/quota.js +250 -133
  26. package/src/backend/retry.js +30 -6
  27. package/src/backend/tokens.js +37 -0
  28. package/src/backend/toolfit.js +352 -0
  29. package/src/backend/wire.js +600 -0
  30. package/src/commands.js +3135 -2918
  31. package/src/config.js +47 -2
  32. package/src/i18n/en.js +544 -466
  33. package/src/i18n/index.js +18 -0
  34. package/src/i18n/ja.js +497 -417
  35. package/src/i18n/ko.js +591 -466
  36. package/src/i18n/zh.js +497 -417
  37. package/src/lsp/client.js +49 -5
  38. package/src/oneshot.js +620 -471
  39. package/src/pack/sbom.js +30 -4
  40. package/src/pack/selfpack.js +25 -9
  41. package/src/pack/sheet.en.js +288 -0
  42. package/src/pack/tar.js +65 -2
  43. package/src/plugins/manage.js +46 -9
  44. package/src/providers/bedrock.js +17 -0
  45. package/src/repl.js +2602 -2286
  46. package/src/safety/audit.js +92 -8
  47. package/src/safety/authcmd.js +14 -3
  48. package/src/safety/guard.js +143 -0
  49. package/src/safety/keystore.js +62 -39
  50. package/src/safety/undo.js +24 -6
  51. package/src/tools/fsutil.js +265 -250
  52. package/src/tools/index.js +239 -34
  53. package/src/tools/jobs.js +158 -29
  54. package/src/tools/verify.js +358 -328
  55. package/src/tools/webfetch.js +92 -9
  56. package/src/ui/md.js +201 -5
  57. package/src/ui/motion.js +0 -1
  58. package/src/ui/pastechip.js +50 -3
  59. package/src/ui/pick.js +115 -0
  60. package/src/ui/screen.js +23 -3
  61. package/src/ui/status.js +613 -610
@@ -92,6 +92,14 @@ export class 지켜본것 {
92
92
  this.편집실패 = 0; // Edit 의 old_string 이 파일과 안 맞음
93
93
  this.되풀이 = 0; // 같은 자리를 또 부름
94
94
  this.도구성공 = 0; // 도구가 탈 없이 끝난 횟수
95
+ /*
96
+ * 다시 읽었는데 통째로 안 실은 횟수 (agent/filemem.js).
97
+ *
98
+ * 사고가 아니다 — 사고율() 에 안 들어간다. 잘한 일을 세는 자리라서
99
+ * 급을 낮추면 안 된다. 여기 두는 까닭은 화면에서 「얼마나 아꼈나」 를
100
+ * 말할 수 있어야 하기 때문이다. 안 보이면 없는 기능이나 같다.
101
+ */
102
+ this.아낀읽기 = 0;
95
103
  }
96
104
 
97
105
  걸음셈() { this.걸음++; return this; }
@@ -118,12 +126,54 @@ export class 지켜본것 {
118
126
  * @param {지켜본것} 본것 이번 대화에서 겪은 것 (없어도 된다)
119
127
  * @param {string} 사람이정한 '작음'|'보통'|'큼' — 사람이 정했으면 그게 답이다
120
128
  */
129
+ /*
130
+ * ── 급은 이름이 아니라 **연결이 알려 준 값**으로 잡는다 ─────────────────
131
+ *
132
+ * 이름에서크기() 는 `70b` 같은 파라미터 수를 찾는다. 로컬 모델은 이름에 그걸
133
+ * 적지만, 벤더 모델은 안 적는다 — `anthropic.claude-opus-4-1` 에는 B 가 없다.
134
+ * 그래서 못 읽고 '보통' 으로 떨어졌고, 실제로 Bedrock 의 Claude Opus 가
135
+ * 「한 번에 파일 6개 · 400줄 넘으면 나눠 쓰기」 를 받았다. 있는 것 중 제일 큰
136
+ * 모델에게 중급용 보조바퀴를 달아 준 셈이다.
137
+ *
138
+ * 그렇다고 `opus` `gpt-5` 같은 **이름표**를 두는 것도 답이 아니다. 그런 표는
139
+ * 새 모델이 나올 때마다 어긋나고, 어긋난 줄도 모른다. 이 저장소가 값 박힌
140
+ * 요금표를 안 두는 것과 같은 까닭이다(backend/price.js).
141
+ *
142
+ * 대신 서버가 알려 준 것을 쓴다. probeCtx() 가 켤 때 이미 받아 오는 값이다.
143
+ * 컨텍스트 길이는 급의 완벽한 잣대는 아니지만, **우리가 실제로 아는 것** 중
144
+ * 제일 가까운 잣대다. 32k 짜리에게 열 파일을 맡기면 창이 먼저 터지고,
145
+ * 200k 짜리를 세 파일에 묶어 두면 좋은 모델을 붙들어 매는 것이다.
146
+ *
147
+ * 순서가 뜻이 있다.
148
+ * 1. 파라미터 수를 **이름에서 읽었으면** 그게 제일 세다. 8B 는 창이 128k
149
+ * 여도 8B 다 — 창 크기가 머리를 키워 주지는 않는다.
150
+ * 2. 못 읽었으면 서버가 말해 준 창 크기로 잡는다.
151
+ * 3. 둘 다 모르면 '보통'.
152
+ * 그리고 이 셋 다 **실제로 돌려 본 결과**(사고율)가 언제든 덮는다.
153
+ */
154
+ const 창으로급 = [
155
+ [128000, '큼'],
156
+ [32000, '보통'],
157
+ ];
158
+
159
+ export function 첫짐작(conn) {
160
+ const 이름것 = 이름으로짐작(conn?.model);
161
+ // 이름에서 파라미터 수를 읽었으면 그대로 간다.
162
+ if (이름에서크기(conn?.model) != null) return 이름것;
163
+
164
+ const 창 = Number(conn?.ctx);
165
+ if (!Number.isFinite(창) || 창 <= 0) return 이름것;
166
+ const 찾은것 = 창으로급.find(([선]) => 창 >= 선);
167
+ const 급 = 찾은것 ? 찾은것[1] : '작음';
168
+ return { 급, 왜: `창이 ${Math.round(창 / 1000)}k 라고 서버가 알려 줍니다`, 짐작: true };
169
+ }
170
+
121
171
  export function 매김(conn, 본것 = null, 사람이정한 = null) {
122
172
  if (급들.includes(사람이정한)) {
123
173
  return { 급: 사람이정한, 왜: '사용자가 직접 정했습니다', 짐작: false };
124
174
  }
125
175
 
126
- const 첫어림 = 이름으로짐작(conn?.model);
176
+ const 첫어림 = 첫짐작(conn);
127
177
  const 율 = 본것?.사고율?.() ?? null;
128
178
  if (율 == null) return 첫어림;
129
179