natureco-cli 5.43.2 → 5.44.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to NatureCo CLI will be documented in this file.
4
4
 
5
+ ## [5.44.1] - 2026-07-08 — "MEMORY: açık 'hatırla' komutu HAM kaydedilir (kayıp önlenir)"
6
+
7
+ ### Added
8
+ - **"Hatırla" dedin ama hiçbir şey kaydedilmedi** sorunu kapatıldı. v5.44.0 yanlış-kaydı önledi ama bir boşluk kaldı: agent `memory_write`'ı çağırmazsa (model tutarsızlığı) VE sıkılaştırılmış regex bilgiyi yakalamazsa (ör. "kod adı VORTEX-8") bilgi HİÇ kaydedilmiyordu. Artık: kullanıcı açıkça **"hatırla / kaydet / not al / unutma / aklında tut"** dediyse ve agent bilinçli kaydetmediyse, mesaj **HAM olarak** saklanır — regex ile parse edip bozmadan. "Sadakat > kategorizasyon": "projemin gizli kod adı VORTEX-8, hatırla" → tam metin (`Projemin gizli kod adı VORTEX-8`) korunur, ne kaybolur ne bozulur. Kayıt komutu içermeyen mesajlar etkilenmez. 571 test yeşil.
9
+
10
+ ## [5.44.0] - 2026-07-08 — "MEMORY: otomatik regex-extraction artık agent'ın bilinçli kaydını ezmiyor"
11
+
12
+ ### Changed
13
+ - **"Yanlış hatırlamak, hiç hatırlamamaktan kötüdür."** Oturum sonu otomatik regex-extraction (`persistSessionToMemory`), agent'ın bilinçli `memory_write`/`memory_tree` kaydının ÜZERİNE yanlış fact yazabiliyordu (ör. "projemin kod adı ONYX-7" → agent doğru kaydeder ama regex ayrıca "Kullanici ad: onyx" ekler). Artık: agent bu oturumda memory'ye YAZDIYSA (disk'teki fact sayısı oturum başındakinden fazlaysa), otomatik regex-extraction **tamamen atlanır** — bilinçli kayıt her zaman kazanır. Modern modeller `memory_write`'ı güvenilir çağırdığından regex çoğu oturumda hiç devreye girmez (sıfır yanlış-pozitif); agent hiç kaydetmediyse (nadir) regex yalnızca çok-net kimlik kalıplarıyla bir güvenlik ağı olarak kalır. 571 test yeşil.
14
+
5
15
  ## [5.43.2] - 2026-07-08 — "FIX: `doctor --fix` artık gerçekten çalışıyor"
6
16
 
7
17
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "natureco-cli",
3
- "version": "5.43.2",
3
+ "version": "5.44.1",
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"
@@ -1265,7 +1265,22 @@ async function startRepl(args) {
1265
1265
  let preferencesAdded = 0;
1266
1266
 
1267
1267
  try {
1268
- // Pattern-based extraction (zaten extractFacts var)
1268
+ // v5.44 KRİTİK KARAR: "yanlış hatırlamak, hiç hatırlamamaktan kötüdür."
1269
+ // Otomatik regex-extraction, agent'ın BİLİNÇLİ memory_write/memory_tree kaydının
1270
+ // üzerine yanlış fact yazabiliyordu (ör. "kod adı ONYX-7" → "Kullanici ad: onyx").
1271
+ // Bu yüzden: agent bu oturumda memory'ye YAZDIYSA (disk'teki fact sayısı oturum
1272
+ // başındakinden fazlaysa), regex-extraction'ı TAMAMEN ATLA — bilinçli kayıt kazanır.
1273
+ // Modern modeller memory_write'ı güvenilir çağırır → regex hiç devreye girmez, sıfır
1274
+ // yanlış-pozitif. Agent hiç kaydetmediyse (nadir) regex bir güvenlik ağı olarak kalır.
1275
+ try {
1276
+ const memFile = path.join(MEMORY_DIR, (cfg.userName || 'default').toLowerCase() + '.json');
1277
+ const diskFacts = JSON.parse(fs.readFileSync(memFile, 'utf8')).facts || [];
1278
+ if (diskFacts.length > (memory.facts || []).length) {
1279
+ return { factsAdded: 0, preferencesAdded: 0, skippedAutoExtract: true };
1280
+ }
1281
+ } catch { /* dosya yok/okunamadı → aşağıdaki güvenlik ağı çalışsın */ }
1282
+
1283
+ // Pattern-based extraction (agent hiç bilinçli kayıt yapmadıysa güvenlik ağı)
1269
1284
  const newFacts = extractFacts(messages, memory.facts || []);
1270
1285
 
1271
1286
  // Bazi user message'lari da tara — genel kalıplarla fact çıkar
@@ -1278,6 +1293,21 @@ async function startRepl(args) {
1278
1293
  // Bot adı sorgulanmış olabilir, mevcut adı koru
1279
1294
  }
1280
1295
 
1296
+ // v5.44: Kullanici AÇIKÇA "hatirla/kaydet/not al" dediyse ve agent bunu bilinçli
1297
+ // kaydetmediyse (buraya kadar geldiysek agent yazmamıştır), mesaji HAM olarak
1298
+ // sakla — regex ile parse edip bozma. "Sadakat > kategorizasyon": kullanicinin
1299
+ // soyledigi bilgiyi AYNEN korumak, yanlis etiketleyip bozmaktan iyidir. Boylece
1300
+ // "kod adi VORTEX-8 hatirla" → tam metin kaydedilir, ne kaybolur ne bozulur.
1301
+ if (/\b(hat[ıi]rla|kaydet|not\s*al|not\s*et|unutma|akl[ıi]nda\s*(tut|bulunsun)|remember|save\s*this|note\s*this)\b/i.test(text)) {
1302
+ const raw = (msg.content || '').trim()
1303
+ .replace(/[,.\s]*(bunu|sunu|şunu)?\s*(kal[ıi]c[ıi]\s*olarak\s*)?(hat[ıi]rla|kaydet|not\s*al|not\s*et|unutma|akl[ıi]nda\s*(tut|bulunsun))\b[.!]*\s*$/i, '')
1304
+ .trim();
1305
+ const fact = raw.length >= 3 ? raw : (msg.content || '').trim();
1306
+ if (fact && !(memory.facts || []).some(f => (f.value || '').toLowerCase() === fact.toLowerCase())) {
1307
+ newFacts.push({ value: fact, score: 8, category: 'explicit', createdAt: new Date().toISOString() });
1308
+ }
1309
+ }
1310
+
1281
1311
  // v5.40: Kisilik/isim cikarimi module-level SAF extractPreferenceFacts'e
1282
1312
  // tasindi (test edilebilir + regresyon kilidi). "kod adı"/"proje adı" gibi
1283
1313
  // masum tamlamalari artik yanlis yakalamiyor; deger orijinal case'de kalir.