deel-local-cli 1.12.0 → 1.13.1

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 (51) hide show
  1. package/README.ko.md +6 -5
  2. package/README.md +6 -5
  3. package/package.json +60 -60
  4. package/src/acp/map.js +30 -25
  5. package/src/acp/serve.js +810 -810
  6. package/src/agent/budget.js +156 -156
  7. package/src/agent/commit.js +32 -9
  8. package/src/agent/compact.js +441 -420
  9. package/src/agent/effort.js +308 -308
  10. package/src/agent/evolve.js +263 -263
  11. package/src/agent/loop.js +1728 -1707
  12. package/src/agent/memory.js +156 -156
  13. package/src/agent/mention.js +210 -210
  14. package/src/agent/recall.js +22 -9
  15. package/src/agent/session.js +1056 -1049
  16. package/src/backend/adapter.js +1355 -1159
  17. package/src/backend/cachemark.js +223 -150
  18. package/src/backend/detect.js +327 -327
  19. package/src/backend/http.js +3 -1
  20. package/src/backend/mcp.js +15 -3
  21. package/src/backend/price.js +69 -6
  22. package/src/backend/probe.js +17 -3
  23. package/src/backend/quota.js +274 -250
  24. package/src/backend/tokens.js +25 -3
  25. package/src/backend/toolfit.js +352 -352
  26. package/src/backend/wire.js +715 -600
  27. package/src/commands.js +3184 -3135
  28. package/src/config.js +39 -0
  29. package/src/i18n/en.js +545 -544
  30. package/src/i18n/ja.js +498 -497
  31. package/src/i18n/ko.js +592 -591
  32. package/src/i18n/zh.js +498 -497
  33. package/src/oneshot.js +625 -620
  34. package/src/pack/tar.js +23 -1
  35. package/src/pack/zip.js +19 -1
  36. package/src/plugins/manage.js +85 -5
  37. package/src/repl.js +2616 -2602
  38. package/src/safety/audit.js +22 -3
  39. package/src/safety/guard.js +124 -9
  40. package/src/safety/network.js +43 -0
  41. package/src/tools/fastgrep.js +15 -0
  42. package/src/tools/fsutil.js +291 -265
  43. package/src/tools/index.js +40 -3
  44. package/src/tools/jobs.js +87 -6
  45. package/src/tools/label.js +52 -0
  46. package/src/tools/spawn.js +114 -0
  47. package/src/tools/verify.js +358 -358
  48. package/src/tools/webfetch.js +28 -3
  49. package/src/ui/export.js +26 -10
  50. package/src/ui/pick.js +115 -115
  51. package/src/ui/status.js +617 -613
package/src/config.js CHANGED
@@ -206,6 +206,45 @@ const 푼것 = new Map(); // 잠긴 값 → 푼 글. 한 판에 한 번만
206
206
  let 열쇠탈 = null;
207
207
  export function 열쇠탈소식() { const s = 열쇠탈; 열쇠탈 = null; return s; }
208
208
 
209
+ /**
210
+ * 이 이름의 환경변수는 **열쇠를 담나.**
211
+ *
212
+ * ── 왜 이 자가 있어야 하나 ────────────────────────────────────────────
213
+ *
214
+ * 열쇠는 두 이름으로 들어온다 — `DEEL_API_KEY` 하나, 그리고 프로필마다
215
+ * `DEEL_KEY_<프로필>`. 아래 resolveKey 가 그 둘을 다 읽는다.
216
+ *
217
+ * 그런데 **막는 쪽은 하나만 알고 있었다.** 자식에게 넘길 환경을 씻는 자
218
+ * (backend/mcp.js 의 열쇠뺀환경)도, 도구 출력에서 값을 가리는 자
219
+ * (agent/loop.js)도 `DEEL_API_KEY` 만 지웠다. 그래서 프로필 열쇠를 쓰는
220
+ * 사람은 `Bash({command:'env'})` 한 줄로 열쇠가 화면에 찍히고, 그 화면이
221
+ * 대화에 실려 **그 열쇠의 주인인 게이트웨이로** 나가고 `.deel/sessions/*.jsonl`
222
+ * 에 남는다.
223
+ *
224
+ * 하필 그 방법을 우리가 권한다 — pack/sbom.js 와 pack/sheet.en.js 의 사내
225
+ * 심사용 명세가 「환경변수를 쓰면 파일에 아예 안 남습니다」 라고 적어 뒀다.
226
+ * 권한 대로 한 사람만 샌 셈이다.
227
+ *
228
+ * 읽는 자리와 막는 자리가 **같은 자에게 물어야** 이런 일이 안 난다. 이름이
229
+ * 하나 늘면 여기만 고친다.
230
+ *
231
+ * 윈도우는 환경변수 이름의 대소문자를 안 가린다(`deel_api_key` 도 같은 값이다).
232
+ * 그래서 견줄 때 대문자로 올린다.
233
+ */
234
+ export function 열쇠환경인가(이름) {
235
+ const n = String(이름 ?? '').toUpperCase();
236
+ return n === 'DEEL_API_KEY' || n.startsWith('DEEL_KEY_');
237
+ }
238
+
239
+ /** 환경에 실제로 들어 있는 **열쇠 값들.** 가릴 때 쓴다. */
240
+ export function 환경속열쇠들(env = process.env) {
241
+ const out = [];
242
+ for (const [k, v] of Object.entries(env ?? {})) {
243
+ if (열쇠환경인가(k) && typeof v === 'string' && v) out.push(v);
244
+ }
245
+ return out;
246
+ }
247
+
209
248
  export function resolveKey(profile) {
210
249
  const byName = profile?.id ? process.env[`DEEL_KEY_${profile.id.toUpperCase()}`] : null;
211
250
  const 값 = byName || process.env.DEEL_API_KEY || profile?.apiKey || '';