natureco-cli 5.35.0 → 5.36.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/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to NatureCo CLI will be documented in this file.
4
4
 
5
+ ## [5.36.0] - 2026-07-05 — "13 PHANTOM ARAÇ TANITILDI + feedback body genisletmesi"
6
+
7
+ Sistematik denetim: 90 aracin agentic prompt/allowlist ile karsilastirmasi → **70 arac ajana HIC tanitilmamisti (phantom)**. Yuksek-degerli + guvenli + key gerektirmeyenler tanitildi (kullanicinin "bende olup uygulamada olmayan tool'lari ekle" hedefi).
8
+
9
+ ### ✨ Eklenen (mevcuttu ama ajana kapali/gorunmezdi)
10
+ - **grep_search** (kod tabaninda icerik arama), **git** (ozel arac, operation-bazli), **http_request** (API/webhook), **code_execution** (python/node/bash sandbox), **notebook_edit** (Jupyter), **clarify** (netlestirme sorusu).
11
+ - **macOS asistan**: `calendar_add`, `reminder_add`, `notes_add`, `mac_notify` (Takvim/Hatirlatici/Notlar/bildirim — Windows'ta zarafetle "sadece macOS" der, kullanicinin Mac'inde calisir).
12
+ - **Medya**: `image_generation`, `text_to_speech`, `speech_to_text`.
13
+
14
+ ### 🐛 Düzeltme
15
+ - **`buildFeedback` genisletildi**: http_request gibi araclar `done` donuyor ama sonucu (body) modele GERI DONMUYORDU → ajan "arac calismiyor" sanip 9 araca sapiyordu. Artik body/text/transcript/data/matches vb. genis alan seti + bilinmeyen alanlar JSON'la geri verilir. (E2E: http_request tek cagirida yaniti dogru dondurdu.)
16
+
17
+ Doğrulama: grep_search/git/http_request/code_execution ajan uzerinden E2E; **506 test yeşil**, ESLint temiz.
18
+
5
19
  ## [5.35.0] - 2026-07-05 — "WEB ARAMA + TODO + GIT-ZINCIRI DUZELTMELERI (sistematik denetim devam)"
6
20
 
7
21
  Kullanicinin "tum ozellikleri tek tek test et" talebiyle sistematik denetime devam edildi; ayni kok-neden deseni (arac var ama agentic promptta hic tanitilmamis/yanlis dosya adi) 3 yerde daha bulundu.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "natureco-cli",
3
- "version": "5.35.0",
3
+ "version": "5.36.0",
4
4
  "description": "OpenClaw'dan daha güvenli, daha hızlı, daha ucuz AI agent CLI. Multi-agent, self-evolving skills, audit log, maliyet optimizasyonu ve NatureCo platform-native.",
5
5
  "bin": {
6
6
  "natureco": "bin/natureco.js"
@@ -21,7 +21,15 @@ const os = require('os');
21
21
  // icinde approvals politikasini uyguluyor (isSafeCommand → direkt; tehlikeli → red;
22
22
  // digerleri → allowlist/full moda gore). Yani keyfi/yikici komut calismaz.
23
23
  // Diger ~85 arac (discord, telegram, cron, browser...) bilerek DISARIDA.
24
- const DEFAULT_ALLOWED = ['write_file', 'read_file', 'edit_file', 'skill_view', 'bash', 'file_search', 'list_dir', 'memory_write', 'memory_tree', 'cron_create', 'duckduckgo', 'web_search', 'todo_write'];
24
+ const DEFAULT_ALLOWED = [
25
+ 'write_file', 'read_file', 'edit_file', 'skill_view', 'bash', 'file_search', 'list_dir', 'grep_search',
26
+ 'memory_write', 'memory_tree', 'cron_create', 'duckduckgo', 'web_search', 'todo_write',
27
+ 'git', 'http_request', 'notebook_edit', 'clarify', 'code_execution',
28
+ // macOS asistan yetenekleri (Windows'ta zarafetle "sadece macOS" der; kullanıcının Mac'inde çalışır)
29
+ 'calendar_add', 'reminder_add', 'notes_add', 'mac_notify',
30
+ // medya (kullanıcının kendi provider/API'siyle)
31
+ 'image_generation', 'text_to_speech', 'speech_to_text',
32
+ ];
25
33
 
26
34
  const TOOL_ALIASES = {
27
35
  write_file: 'write_file', create_file: 'write_file', writefile: 'write_file', write: 'write_file', create: 'write_file', save_file: 'write_file', new_file: 'write_file',
@@ -36,6 +44,13 @@ const TOOL_ALIASES = {
36
44
  cron_create: 'cron_create', cron: 'cron_create', schedule_task: 'cron_create', create_cron: 'cron_create',
37
45
  duckduckgo_search: 'duckduckgo', duckduckgo: 'duckduckgo', web_search: 'web_search', search_web: 'web_search', internet_search: 'duckduckgo',
38
46
  todo_write: 'todo_write', todo: 'todo_write', task_write: 'todo_write', todos: 'todo_write',
47
+ grep_search: 'grep_search', grep: 'grep_search', ripgrep: 'grep_search', content_search: 'grep_search', search_code: 'grep_search',
48
+ git: 'git', http_request: 'http_request', http: 'http_request', fetch: 'http_request', curl: 'http_request',
49
+ notebook_edit: 'notebook_edit', clarify: 'clarify', ask_user: 'clarify', code_execution: 'code_execution', run_code: 'code_execution', code_exec: 'code_execution',
50
+ calendar_add: 'calendar_add', add_event: 'calendar_add', reminder_add: 'reminder_add', add_reminder: 'reminder_add',
51
+ notes_add: 'notes_add', add_note: 'notes_add', mac_notify: 'mac_notify', notify: 'mac_notify', notification: 'mac_notify',
52
+ image_generation: 'image_generation', generate_image: 'image_generation', text_to_speech: 'text_to_speech', tts: 'text_to_speech',
53
+ speech_to_text: 'speech_to_text', stt: 'speech_to_text', transcribe: 'speech_to_text',
39
54
  };
40
55
 
41
56
  function expandHome(p) {
@@ -229,13 +244,21 @@ function buildFeedback(norm, res) {
229
244
  const ok = res && res.success !== false;
230
245
  if (!ok) return `${norm} HATA: ${(res && res.error) || 'bilinmeyen hata'}`;
231
246
  if (norm === 'write_file') return `write_file OK: ${res.path || ''} (${res.size != null ? res.size : '?'} bytes)`;
247
+ // Modelin GORMESI gereken cikti — genis alan seti (arac cesitliligi icin):
248
+ // content(read), output/stdout(bash), body(http), text(tts/transcribe), results/items/matches(search),
249
+ // reply/answer/data/summary/transcript(cesitli). Yoksa tum sonucu (kucuk meta) JSON'la.
232
250
  let body = '';
233
- if (res.content != null) body = String(res.content).slice(0, 2500);
234
- else if (res.output != null) body = String(res.output).slice(0, 2000);
235
- else if (res.stdout != null) body = String(res.stdout).slice(0, 2000);
236
- else if (res.results != null) body = JSON.stringify(res.results).slice(0, 2000);
237
- else if (res.items != null) body = JSON.stringify(res.items).slice(0, 2000);
238
- const head = `${norm} OK` + (res.path ? ` (${res.path})` : '');
251
+ const first = ['content', 'output', 'stdout', 'text', 'transcript', 'body', 'reply', 'answer', 'summary', 'url', 'path'];
252
+ const jsonish = ['results', 'items', 'matches', 'data', 'events', 'entries', 'files'];
253
+ for (const k of first) { if (res[k] != null && String(res[k]).trim()) { body = String(res[k]).slice(0, 2500); break; } }
254
+ if (!body) for (const k of jsonish) { if (res[k] != null) { body = JSON.stringify(res[k]).slice(0, 2000); break; } }
255
+ if (!body) {
256
+ // hicbir bilinen alan yok sonucu oldugu gibi ver (success/error disi anlamli alanlar)
257
+ const meta = {};
258
+ for (const k of Object.keys(res)) if (!['success', 'error'].includes(k)) meta[k] = res[k];
259
+ if (Object.keys(meta).length) body = JSON.stringify(meta).slice(0, 1500);
260
+ }
261
+ const head = `${norm} OK` + (res.path ? ` (${res.path})` : (res.status ? ` (HTTP ${res.status})` : ''));
239
262
  return body ? `${head}:\n${body}` : head;
240
263
  }
241
264
 
@@ -261,6 +261,14 @@ async function workflow(params) {
261
261
  '- duckduckgo_search: internetten anlik arama yap (API key gerekmez, HER ZAMAN calisir). parametreler: query, maxResults.',
262
262
  '- web_search: internetten arama (Tavily API key ayarliysa daha zengin sonuc; ayarli degilse hata doner — o zaman duckduckgo_search kullan). parametreler: query, maxResults.',
263
263
  '- todo_write: gorev/yapilacaklar listesi yonet. parametre: action (list/add/update/start/done/remove/clear), + action\'a gore diger alanlar.',
264
+ '- grep_search: dosya ICERIGINDE metin/desen ara (kod tabaninda hizli arama). parametreler: pattern, path, includePattern (opsiyonel glob), maxResults. (bash grep yerine bunu tercih et.)',
265
+ '- git: git islemi. parametreler: operation (status/diff/log/branches/add/commit), args, message (commit icin). (Basit git icin bunu kullan.)',
266
+ '- http_request: HTTP istegi at (API cagrisi, webhook, veri cekme). parametreler: url, method, headers, body.',
267
+ '- code_execution: kod parcasi calistir (sandboxli). parametreler: code, language (python/node/bash).',
268
+ '- notebook_edit: Jupyter (.ipynb) hucre duzenle. parametreler: filePath, ...',
269
+ '- clarify: kullaniciya netlestirme sorusu sor (belirsizlik varsa). parametreler: question, options.',
270
+ '- calendar_add / reminder_add / notes_add / mac_notify: macOS Takvim/Hatirlatici/Notlar/bildirim (kullanici macOS ise; degilse arac "sadece macOS" der).',
271
+ '- image_generation: gorsel uret. parametre: prompt, size. | text_to_speech: metni sese cevir (text). | speech_to_text: sesi metne cevir (audioPath).',
264
272
  '- memory_write: HIZLI tek bilgi kaydet (isim, kisa tercih). parametreler: username ("' + memUser + '"), fact, category. YENI oturumda hatirlanir.',
265
273
  '- memory_tree: AGAC-HAFIZA — zengin/kategorize kalici bilgi (proje, karar, teknik not, kisisel detay). action: index|read|search|append; username="' + memUser + '"; append icin: root (1-kisisel|2-teknik|3-kararlar) + branch (dal basligi) + content (yaprak). YENI oturumda hatirlanir.',
266
274
  '\nKurallar:',