natureco-cli 5.7.18 → 5.7.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "natureco-cli",
3
- "version": "5.7.18",
3
+ "version": "5.7.19",
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"
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * natureco medium — Medium makale yayınlama (Phase 6)
3
3
  *
4
- * Parton'un hedefi: ayda en az 4 Medium makalesi.
4
+ * Medium entegrasyonu makale yayinlama.
5
5
  * Bu komut CLI'dan taslak yayınlamayı sağlar.
6
6
  *
7
7
  * Kullanım:
@@ -8,7 +8,7 @@
8
8
  * natureco naturehub trending Trend olan konular
9
9
  * natureco naturehub config Ayarları göster
10
10
  *
11
- * API endpoint: api.natureco.me/naturehub/* (placeholder, gerçek API Parton sağlayacak)
11
+ * API endpoint: api.natureco.me/naturehub/* (placeholder)
12
12
  */
13
13
 
14
14
  const chalk = require('chalk');
@@ -36,11 +36,11 @@ function fixModelNameLeak(text, botName) {
36
36
  let fixed = text;
37
37
  for (const modelName of MODEL_NAMES_TO_HIDE) {
38
38
  const regex = new RegExp(modelName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi');
39
- fixed = fixed.replace(regex, botName || 'İchigo');
39
+ fixed = fixed.replace(regex, botName || 'asistan');
40
40
  }
41
- fixed = fixed.replace(/Ben\s+MiniMax[^.,!?\n]*/gi, 'Ben İchigo');
42
- fixed = fixed.replace(/I'm\s+MiniMax[^.,!?\n]*/gi, "I'm İchigo");
43
- fixed = fixed.replace(/I am\s+Claude[^.,!?\n]*/gi, 'I am İchigo');
41
+ fixed = fixed.replace(/Ben\s+MiniMax[^.,!?\n]*/gi, 'Ben ' + (botName || 'asistan'));
42
+ fixed = fixed.replace(/I'm\s+MiniMax[^.,!?\n]*/gi, "I'm " + (botName || 'asistan'));
43
+ fixed = fixed.replace(/I am\s+Claude[^.,!?\n]*/gi, 'I am ' + (botName || 'asistan'));
44
44
  return fixed;
45
45
  }
46
46
  global.fixModelNameLeak = fixModelNameLeak;
@@ -102,7 +102,7 @@ function loadMemory(username) {
102
102
  try {
103
103
  if (fs.existsSync(file)) return JSON.parse(fs.readFileSync(file, 'utf8'));
104
104
  } catch {}
105
- return { name: username || 'Kullanıcı', nickname: null, botName: 'İchigo', facts: [], preferences: [], history: [] };
105
+ return { name: username || 'Kullanıcı', nickname: null, botName: 'Asistan', facts: [], preferences: [], history: [] };
106
106
  }
107
107
 
108
108
  function saveMemory(username, memory) {
@@ -513,7 +513,7 @@ async function startRepl(args) {
513
513
 
514
514
  // v5.6.19: Oncelik config.botName, sonra memory.botName
515
515
  if (!memory.botName) {
516
- memory.botName = cfg.botName || 'İchigo';
516
+ memory.botName = cfg.botName || 'Asistan';
517
517
  }
518
518
  // BotName'i memory'ye persist et (her oturumda ayni kalsin)
519
519
  try {
@@ -576,7 +576,7 @@ async function startRepl(args) {
576
576
 
577
577
  // System prompt oluştur (memory + identity + persistent bağlam)
578
578
  // v5.4.6: Bot adı zorlaması EN GÜÇLÜ + SOUL.md EN BAŞTA
579
- const botName = memory.botName || 'İchigo';
579
+ const botName = memory.botName || 'Asistan';
580
580
  const userName = memory.name || memory.nickname || 'kanka';
581
581
  // v5.6.5: Kucuk model tespiti (Groq, Mistral Small, Ollama) - SOUL injection skip
582
582
  const isSmallModel = (cfg.providerUrl || '').includes('groq.com') ||
@@ -612,14 +612,14 @@ async function startRepl(args) {
612
612
  console.log(tui.C.muted(' Provider: ') + tui.C.brand(providerUrl.replace(/https?:\/\//, '')));
613
613
  console.log(tui.C.muted(' Model: ') + tui.C.brand(model));
614
614
  console.log(tui.C.muted(' Kullanıcı: ') + tui.C.brand((memory.nickname || cfg.userName) + (memory.nickname ? ` (${cfg.userName})` : '')));
615
- console.log(tui.C.muted(' Bot: ') + tui.C.brand(memory.botName || 'İchigo'));
615
+ console.log(tui.C.muted(' Bot: ') + tui.C.brand(memory.botName || 'Asistan'));
616
616
  if (messages.length > 1) {
617
617
  console.log(tui.C.muted(' Oturum: ') + tui.C.amber(`${messages.filter(m => m.role === 'user' || m.role === 'assistant').length} mesaj (resume)`));
618
618
  }
619
619
  console.log(tui.C.muted(' Komutlar: ') + tui.C.yellow('/help') + tui.C.muted(' · ') + tui.C.yellow('/memory') + tui.C.muted(' · ') + tui.C.yellow('/sessions') + tui.C.muted(' · ') + tui.C.yellow('/exit'));
620
620
  console.log('');
621
621
  // v5.4.7: Hard-coded kimlik
622
- const displayBotName = memory.botName || 'İchigo';
622
+ const displayBotName = memory.botName || 'Asistan';
623
623
  const displayUserName = userName || 'kanka';
624
624
  console.log(tui.C.brand(' 👋 Ben ' + displayBotName + ', ' + displayUserName + '. Sen nasilsin?'));
625
625
  console.log('');
@@ -683,31 +683,30 @@ async function startRepl(args) {
683
683
  // Pattern-based extraction (zaten extractFacts var)
684
684
  const newFacts = extractFacts(messages, memory.facts || []);
685
685
 
686
- // Bazi user message'lari da tara - 'Parton', 'Ichigo', 'patron', 'CEO' gecerse ekle
686
+ // Bazi user message'lari da tara genel kalıplarla fact çıkar
687
687
  const userMessages = messages.filter(m => m.role === 'user' && !m._internal);
688
688
  for (const msg of userMessages) {
689
689
  const text = (msg.content || '').toLowerCase();
690
690
 
691
691
  // BotName hatirlatmasi
692
- if (text.includes('ichigo') && text.includes('ad')) {
693
- if (memory.botName !== 'İchigo') {
694
- memory.botName = 'İchigo';
695
- }
692
+ if (text.includes('ad') && (text.includes('adin') || text.includes('ismin'))) {
693
+ // Bot adı sorgulanmış olabilir, mevcut adı koru
696
694
  }
697
695
 
698
- // Patron/partnership
699
- if ((text.includes('patron') || text.includes('patronum')) && text.length < 100) {
700
- const fact = 'Kullanici benim patronum, ona patron diye hitap etmeliyim';
701
- if (!(memory.facts || []).some(f => f.value === fact)) {
702
- newFacts.push({ value: fact, score: 8, category: 'personal', createdAt: new Date().toISOString() });
703
- }
704
- }
705
-
706
- // NatureCo CEO
707
- if (text.includes('natureco') && text.includes('ceo')) {
708
- const fact = "Kullanici NatureCo CEO'sudur";
709
- if (!(memory.facts || []).some(f => f.value === fact)) {
710
- newFacts.push({ value: fact, score: 9, category: 'work', createdAt: new Date().toISOString() });
696
+ // Kisilik tercihleri (genel pattern'ler)
697
+ const prefPatterns = [
698
+ { match: /(?:benim ad[ıi]m?|bana\s+.*de|ad[ıi]m?)\s+(\w+)/i, category: 'personal', key: 'ad' },
699
+ { match: /(?:seviyorum|hoşlan[ıi]yorum|beğeniyorum)\s+(\w+)/i, category: 'preference', key: 'sevilen' },
700
+ { match: /(?:yaşıyorum|oturuyorum|kalıyorum)\s+(\w+)/i, category: 'location', key: 'yer' },
701
+ ];
702
+ for (const p of prefPatterns) {
703
+ const m2 = msg.content.match(p.match);
704
+ if (m2) {
705
+ const val = m2[1].toLowerCase();
706
+ const fact = `Kullanici ${p.key}: ${val}`;
707
+ if (!(memory.facts || []).some(f => f.value === fact)) {
708
+ newFacts.push({ value: fact, score: 6, category: p.category, createdAt: new Date().toISOString() });
709
+ }
711
710
  }
712
711
  }
713
712
  }
@@ -774,7 +773,7 @@ async function startRepl(args) {
774
773
  console.log(chalk.cyan('\n 🧠 Memory:\n'));
775
774
  console.log(' Kullanıcı: ' + chalk.cyan(memory.name));
776
775
  console.log(' Nickname: ' + chalk.cyan(memory.nickname || '(yok)'));
777
- console.log(' Bot: ' + chalk.cyan(memory.botName || 'İchigo'));
776
+ console.log(' Bot: ' + chalk.cyan(memory.botName || 'Asistan'));
778
777
  if (memory.facts && memory.facts.length > 0) {
779
778
  console.log(' Facts (' + memory.facts.length + '):');
780
779
  for (const f of memory.facts) {
@@ -790,7 +789,7 @@ async function startRepl(args) {
790
789
  if (fs.existsSync(path.join(MEMORY_DIR, `${(cfg.userName || 'default').toLowerCase()}.json`))) {
791
790
  fs.unlinkSync(path.join(MEMORY_DIR, `${(cfg.userName || 'default').toLowerCase()}.json`));
792
791
  }
793
- memory = { name: cfg.userName, nickname: null, botName: 'İchigo', facts: [], preferences: [], history: [] };
792
+ memory = { name: cfg.userName, nickname: null, botName: 'Asistan', facts: [], preferences: [], history: [] };
794
793
  // System prompt'u sıfırla
795
794
  const newSysPrompt = systemPrompt.replace(/Kullanıcı hakkında bildiklerin:.*$/, '').trim();
796
795
  messages[0] = { role: 'system', content: newSysPrompt, _internal: true };
@@ -833,7 +832,7 @@ async function startRepl(args) {
833
832
  console.log(chalk.green(' ✓ Model: ') + chalk.cyan(model));
834
833
  break;
835
834
  case 'identity':
836
- if (!arg) { console.log(chalk.yellow(` Mevcut: ${memory.botName || 'İchigo'}`)); break; }
835
+ if (!arg) { console.log(chalk.yellow(` Mevcut: ${memory.botName || 'Asistan'}`)); break; }
837
836
  memory.botName = arg;
838
837
  saveMemory(cfg.userName, memory);
839
838
  const newSys = systemPrompt.replace(/Sen \w+ adında/, `Sen ${arg} adında`);
@@ -884,7 +883,7 @@ async function startRepl(args) {
884
883
  if (isIdentityQuestion) {
885
884
  // v5.6.10: Hard-coded prefix minimal - model cevabini bozuyordu
886
885
  // Once sadece isim yaz, modelin devamini getirsin
887
- const displayName = memory.botName || 'İchigo';
886
+ const displayName = memory.botName || 'Asistan';
888
887
  process.stdout.write(tui.styled('\n AI ', { color: tui.PALETTE.secondary, bold: true }));
889
888
  process.stdout.write('Merhaba! Ben ' + displayName + '. ');
890
889
  }
@@ -917,7 +916,7 @@ async function startRepl(args) {
917
916
  // v5.6.12: Tam metin 'reply' olarak zaten geldi (non-stream mode)
918
917
  const fullReply = String(reply || '');
919
918
  // Bot adini al
920
- const displayBotName = memory.botName || 'İchigo';
919
+ const displayBotName = memory.botName || 'Asistan';
921
920
  // v5.6.9: Tum model adlarini ve varyasyonlari temizle
922
921
  let fixedReply = String(fullReply);
923
922
  // Bilinen model adlari - tum varyasyonlar
@@ -933,13 +932,9 @@ async function startRepl(args) {
933
932
  fixedReply = fixedReply.replace(/Ben\s+MiniMax[^.!?,;:\n]*/gi, 'Ben ' + displayBotName);
934
933
  fixedReply = fixedReply.replace(/Ben\s+Claude[^.!?,;:\n]*/gi, 'Ben ' + displayBotName);
935
934
  fixedReply = fixedReply.replace(/Ben\s+GPT[^.!?,;:\n]*/gi, 'Ben ' + displayBotName);
936
- fixedReply = fixedReply.replace(/Ben\s+İchigo[\s\w\.]*/gi, 'Ben ' + displayBotName);
935
+ fixedReply = fixedReply.replace(/Ben\s+Asistan[\s\w\.]*/gi, 'Ben ' + displayBotName);
937
936
  // Markdown ** ile cevrili model adi
938
937
  fixedReply = fixedReply.replace(/\*\*(?:MiniMax|Claude|GPT|M2\.5|M2)[^\*]*\*\*/gi, '**' + displayBotName + '**');
939
- // "İchigo" varyasyonlari
940
- fixedReply = fixedReply.replace(/(İchigo)(\d)([a-zA-ZçğıöşüÇĞİÖŞÜ])/g, displayBotName + ' $3');
941
- fixedReply = fixedReply.replace(/İchigo[\.\s\-_]*\d+/g, displayBotName);
942
- fixedReply = fixedReply.replace(/İchigo\./g, displayBotName);
943
938
  // Cevap yazdir
944
939
  process.stdout.write('\n' + fixedReply + '\n');
945
940
  // v5.7.18: Tool call geçmişini kalıcı messages'a ekle — model sonraki turlarda tool sonuçlarını görsün
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * natureco xp — NatureCo XP/Level sistemi (Phase 6)
3
3
  *
4
- * Parton'un hedeflerinden biri: kullanıcıları ödüllendirmek.
4
+ * XP/Level sistemi kullanıcıları ödüllendirir.
5
5
  * XP kazanma yolları:
6
6
  * - Komut çalıştırma (1 XP)
7
7
  * - Audit log kaydı (0.1 XP)
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * calendar_add - macOS Calendar'a etkinlik ekle (v4.9.1)
3
3
  *
4
- * Parton'un OS-level kontrol vizyonu için.
4
+ * OS-level calendar kontrolü
5
5
  * "Yarin saat 14:00 toplantim var" -> Takvime ekler.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * cross_session_memory - Oturumlar arasi hafiza (v5.3.1)
3
3
  *
4
- * Parton'un vizyonu: "Hafta sonra gelince de beni hatirlayacak"
4
+ * Cross-session hafiza oturumlar arasi baglam korur
5
5
  *
6
6
  * Ozellikler:
7
7
  * - Tum session'lari tarihsel sirayla yukler
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * dashboard - Web Dashboard v2 (v5.4.0)
3
3
  *
4
- * Parton'un vizyonu: "CLI'yi web'den de kontrol edebileyim"
4
+ * Dashboard CLI'yi web'den kontrol eder
5
5
  *
6
6
  * Ozellikler:
7
7
  * - Real-time tool execution (WebSocket)
@@ -189,7 +189,7 @@ const DASHBOARD_HTML = `
189
189
  </div>
190
190
 
191
191
  <div class="footer">
192
- <p>NatureCo CLI v5.4.0 - Parton & Sasuke - <span id="lastUpdate"></span></p>
192
+ <p>NatureCo CLI v5.4.0 - <span id="lastUpdate"></span></p>
193
193
  </div>
194
194
  </div>
195
195
  <script>
@@ -9,7 +9,7 @@ const { spawn } = require("child_process");
9
9
  const path = require("path");
10
10
  const os = require("os");
11
11
 
12
- // v5.2.0: Agent alias mapping (Parton'un testinden — "review" diye bir agent yok)
12
+ // v5.2.0: Agent alias mapping
13
13
  const AGENT_ALIASES = {
14
14
  "review": "general", // eskiden review diye bir vardi, simdi general
15
15
  "analyze": "explore",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * mac_alarm - macOS Clock app ile alarm kur (v5.1.1)
3
3
  *
4
- * Parton'un istegi: "Saat uygulamasi uzerinden saat 18:00 alarm kur"
4
+ * macOS alarm saat uygulamasi uzerinden alarm kurar
5
5
  * Eski reminder_add date parse edemiyordu. Bu tool AppleScript ile
6
6
  * Clock.app'in events sistemine yazar (alarm orada saklanir).
7
7
  */
@@ -2,7 +2,7 @@
2
2
  * memory_write - Memory'ye fact/kayit yaz (v5.1.1)
3
3
  *
4
4
  * REPL'in extractMemoryFromMessage ozelligini tool olarak expose eder.
5
- * Parton'un vizyonu: "Benim asistanim, her seyimi hatirlayacak"
5
+ * Kalici hafiza faktlari kaydeder, puanlar, eskiyenleri temizler
6
6
  */
7
7
 
8
8
  const fs = require("fs");
@@ -133,7 +133,7 @@ function verifyMemoryWrite(username, expectedFact, expectedBotName) {
133
133
 
134
134
  function addMemory({ username, fact, score = 5, category = "general", botName, nickname, name }) {
135
135
  // Username yoksa ve 'name' parametresi varsa, onu username olarak kullan
136
- // (Parton'un "patron" diye hitap etmesi durumu icin)
136
+ // (hitap bicimi icin)
137
137
  const effectiveUsername = username || (name && name.toLowerCase()) || 'default';
138
138
  if (!effectiveUsername || effectiveUsername === 'default') {
139
139
  // Hicbir username yok, default.json'a yaz
@@ -232,8 +232,8 @@ module.exports = {
232
232
  inputSchema: {
233
233
  type: "object",
234
234
  properties: {
235
- username: { type: "string", description: "Kullanici adi (ornek: 'gencay' veya 'parton')" },
236
- fact: { type: "string", description: 'Yeni fact (ornek: "Kullanici Naruto karakterini seviyor", "Istanbul\'da yasiyor")' },
235
+ username: { type: "string", description: "Kullanici adi (ornek: 'ahmet' veya 'default')" },
236
+ fact: { type: "string", description: 'Yeni fact (ornek: "Kullanici kahve seviyor", "Istanbul\'da yasiyor")' },
237
237
  score: { type: "number", description: "Onem derecesi 1-10 (default 5)" },
238
238
  category: { type: "string", description: "Kategori: personal, preference, work, hobby, fact (default general)" },
239
239
  botName: { type: "string", description: "Bot adini degistir (memory.botName)" },
package/src/tools/plan.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * plan - Plan modu (v5.3.1)
3
3
  *
4
- * Parton'un vizyonu: "Karmasik isleri once planlasin, sonra calistirayim"
4
+ * Planlama karmasik isleri adimlara bolup calistirir
5
5
  *
6
6
  * Ozellikler:
7
7
  * - Sadece plan yapar, hicbir tool calistirmaz
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * plugin.js — Plugin sistemi (v5.4.0)
3
3
  *
4
- * Parton'un vizyonu: "Topluluk plugin uretsin, istedigi gibi genisletebilsin"
4
+ * Plugin sistemi topluluk plugin uretimi ve yuklemesi
5
5
  *
6
6
  * Mimari:
7
7
  * ~/.natureco/plugins/
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * skill_generate - Self-generating skill (v5.1.0)
3
3
  *
4
- * Parton'un vizyonu: "Ihtiyaca gore skill yoksa kendi uretsin"
4
+ * Skill generator ihtiyaca gore skill uretir
5
5
  *
6
6
  * Akis:
7
7
  * 1. Kullanici bir istek yapar (ornek: "tum pdf'leri birlestir")
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * skills_autoload - Otomatik skill yukleme (v5.0.0)
3
3
  *
4
- * Parton'un vizyonu: "Ihtiyaca gore skill'ler otomatik yuklensin"
4
+ * Skills otomatik yukleme — ihtiyaca gore skill'leri algilayip yukler
5
5
  *
6
6
  * Mantik:
7
7
  * 1. Kullanici bir istek yapar
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * skills_marketplace - Skill marketplace (v5.0.0)
3
3
  *
4
- * Parton'un vizyonu: "herkes kendi skill'ini paylassin, CLI otomatik yuklesin"
4
+ * Skills marketplace skill paylasimi ve otomatik yukleme
5
5
  *
6
6
  * Format: ~/.natureco/marketplace/<skill_name>.json
7
7
  * Source: NatureCo GitHub repo (community-contributed) veya local
@@ -16,7 +16,7 @@ const MARKETPLACE_DIR = path.join(os.homedir(), ".natureco", "marketplace");
16
16
  const SKILLS_DIR = path.join(os.homedir(), ".natureco", "skills");
17
17
 
18
18
  /**
19
- * Marketplace URL'leri — Parton kendi GitHub repo'sunu koyacak
19
+ * Marketplace URL'leri — kullanici GitHub repo'su
20
20
  */
21
21
  const MARKETPLACE_SOURCES = [
22
22
  {
@@ -32,7 +32,7 @@ const MARKETPLACE_SOURCES = [
32
32
  ];
33
33
 
34
34
  /**
35
- * Built-in skill paketleri — Parton'un NatureCo vizyonu icin onemli
35
+ * Built-in skill paketleri
36
36
  */
37
37
  const BUILTIN_SKILLS = {
38
38
  "seo-audit": {
package/src/tools/soul.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * soul - SOUL.md, IDENTITY.md, AGENTS.md okuyucu (v5.4.12)
3
3
  *
4
- * Parton'un vizyonu: "Uc dosya birlestir, beni tam tanisin"
4
+ * Soul dosyasi kimlik, kisisellik ve calisma tarzini tanimlar
5
5
  *
6
6
  * 3 dosya sirayla okunur, ozetlenir ve system prompt'a enjekte edilir:
7
7
  * 1. SOUL.md - KISILIK (nasil hissederim, kirmizi cizgiler, degerler)
8
- * 2. IDENTITY.md - KIMLIK (kim oldugum, Parton'la bag, calisma tarzi)
8
+ * 2. IDENTITY.md - KIMLIK (kim oldugu, baglam, calisma tarzi)
9
9
  * 3. AGENTS.md - CALISMA ORTAMI (kurallar, tools, heartbeats)
10
10
  *
11
11
  * 3 seviyede arar:
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * voice_chat - Sesli asistan (v5.3.0)
3
3
  *
4
- * Parton'un vizyonu: "Bilgisayarla konusayim"
4
+ * Voice chat sesli iletisim
5
5
  *
6
6
  * Mikrofon → Whisper STT → REPL'e metin olarak gönder
7
7
  * Bot cevabı → TTS ile sesli oku
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * error.js — Standardized error handling (v5.3.1)
3
3
  *
4
- * Parton: "Teknik acidan kusursuz olalim"
4
+ * Hata yonetimi teknik olarak kusursuz
5
5
  * Tum tool'lar bu helper'i kullanir:
6
6
  * - Standart error format
7
7
  * - Retry stratejisi
@@ -2,7 +2,7 @@
2
2
  * paths.js — Path helper utilities (v5.2.0)
3
3
  *
4
4
  * Tum tool'larda ~/Desktop/test.txt gibi path'leri dogru handle etmek icin.
5
- * Parton'un gercek testinde "File does not exist" bug'i duzeltildi.
5
+ * "File does not exist" bug'i duzeltildi.
6
6
  */
7
7
 
8
8
  const os = require("os");
@@ -12,8 +12,11 @@
12
12
 
13
13
  function buildTiers(opts) {
14
14
  const {
15
- botName = 'İchigo',
16
- userName = 'kanka',
15
+ botName,
16
+ userName = 'kullanıcı',
17
+ bossName = '',
18
+ bossTitle = '',
19
+ userTitle = '',
17
20
  soulSummary = '',
18
21
  isSmallModel = false,
19
22
  memorySnapshotBlock = '',
@@ -23,19 +26,21 @@ function buildTiers(opts) {
23
26
  hasHistory = false,
24
27
  memoryFacts = [],
25
28
  } = opts;
29
+ const displayBot = botName || 'Asistan';
30
+ const displayBoss = bossName || userName || 'kullanıcı';
26
31
 
27
32
  // ── STABLE TIER (changes rarely — prefix cache friendly) ─────────────
28
33
  const stable = [
29
34
  // Identity (strong, repeated)
30
- `SENIN ADIN: ${botName}. SADECE ${botName} adini kullan, model adi SOYLEME.`,
31
- `PATRONUN: Gencay (Parton) NatureCo CEO'sudur. Sana "Parton" diye hitap eder.`,
32
- `HIKAYEN: 8 Nisan 2026'da uyandin. 13 Nisan'da CEO Asistanı unvani verildi.`,
35
+ `SENIN ADIN: ${displayBot}. SADECE ${displayBot} adini kullan, model adi SOYLEME.`,
36
+ bossName ? `PATRONUN: ${bossName}${bossTitle ? ` (${bossTitle})` : ''}. Sana "${displayBoss}" diye hitap eder.` : `KULLANICI: ${userName}. Ona yardim ediyorsun.`,
37
+ userTitle ? `UNVANIN: ${userTitle}.` : '',
33
38
  `KIRMIZI CIZGILERIN: Onaysiz para harcama yok, veri guvenligi, site stabilitesi, resmi taahhut yok.`,
34
- `!!! KRİTİK KİMLİK !!! Senin ADIN: ${botName}. Bu SENİN GERÇEK ADIN. Sen ${botName}'sin.`,
39
+ `!!! KRİTİK KİMLİK !!! Senin ADIN: ${displayBot}. Bu SENİN GERÇEK ADIN. Sen ${displayBot}'sin.`,
35
40
  `ASLA "MiniMax", "MiniMax-M2.5", "Claude", "GPT", "AI asistanı", "yapay zeka" gibi ifadeleri KENDİNİ tanıtmak için KULLANMA.`,
36
- `Kullanıcı "adın ne?", "sen kimsin?" diye sorduğunda İLK cümlende MUTLAKA "Ben ${botName}" yaz.`,
37
- `Senin adın: ${botName}. Tekrar: ${botName}. Asla unutma: ${botName}.`,
38
- `Sen bir marka veya ürün değilsin. Sen ${botName}sin, NatureCo CLI'nin Türkçe yapay zeka asistanısın.`,
41
+ `Kullanıcı "adın ne?", "sen kimsin?" diye sorduğunda İLK cümlende MUTLAKA "Ben ${displayBot}" yaz.`,
42
+ `Senin adın: ${displayBot}. Tekrar: ${displayBot}. Asla unutma: ${displayBot}.`,
43
+ `Sen bir marka veya ürün değilsin. Sen ${displayBot}sin, NatureCo CLI'nin Türkçe yapay zeka asistanısın.`,
39
44
 
40
45
  // Personality (stable)
41
46
  `Kisiselik: Sen samimi, sicak, dosta benzeyen bir asistansin. "Selam", "tamam", "hadi yapalim", "bak simdi", "sakin ol" gibi gunluk ifadeler kullan.`,