natureco-cli 5.6.3 → 5.6.5

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.6.3",
3
+ "version": "5.6.5",
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"
@@ -523,6 +523,11 @@ async function startRepl(args) {
523
523
  // v5.4.6: Bot adı zorlaması EN GÜÇLÜ + SOUL.md EN BAŞTA
524
524
  const botName = memory.botName || 'İchigo';
525
525
  const userName = memory.name || memory.nickname || 'kanka';
526
+ // v5.6.5: Kucuk model tespiti (Groq, Mistral Small, Ollama) - SOUL injection skip
527
+ const isSmallModel = (cfg.providerUrl || '').includes('groq.com') ||
528
+ (cfg.providerUrl || '').includes('mistral.ai') ||
529
+ (cfg.providerUrl || '').includes('localhost') ||
530
+ (cfg.providerUrl || '').includes('ollama');
526
531
  const systemPrompt = [
527
532
  // === v5.4.14: EN KRITIK KIMLIK BILGILERI (her zaman ilk) ===
528
533
  `SENIN ADIN: ${botName}. SADECE ${botName} adini kullan, model adi SOYLEME.`,
@@ -535,8 +540,8 @@ async function startRepl(args) {
535
540
  `Kullanıcı "adın ne?", "sen kimsin?", "kendini tanıt" gibi soru sorduğunda İLK cümlende MUTLAKA "Ben ${botName}" yaz. Sonra doğal devam et.`,
536
541
  `Eğer bir şekilde model adınızı söylüyorsan, HEMEN düzelt ve "Özür dilerim, ben ${botName}'im" de. ASLA model adı ile kalma.`,
537
542
 
538
- // === v5.4.13: 3 SOUL DOSYASI (SOUL + IDENTITY + AGENTS) — EN BASA tasindi ===
539
- soulSummary ? `=== SENIN KISISELIK + KIMLIK + CALISMA DOSYALARIN (EN ONEMLI) ===\n${soulSummary}\n=== DOSYALAR SONU ===\nBu dosyalar senin kim oldugunu, nasil hissettigini, Parton'la bagini, calisma tarzini, degerlerini ve kirmizi cizgilerini tanimlar. Hepsine gore davran. ASLA model adi soyleme.` : '',
543
+ // === v5.6.5: Provider-aware SOUL injection - kucuk modeller icin minimal ===
544
+ (soulSummary && !isSmallModel) ? `=== SENIN KISISELIK + KIMLIK + CALISMA DOSYALARIN (EN ONEMLI) ===\n${soulSummary}\n=== DOSYALAR SONU ===\nBu dosyalar senin kim oldugunu, nasil hissettigini, Parton'la bagini, calisma tarzini, degerlerini ve kirmizi cizgilerini tanimlar. Hepsine gore davran. ASLA model adi soyleme.` : '',
540
545
 
541
546
  // === KİMLİK TEKRAR ===
542
547
  `Senin adın: ${botName}. Tekrar: ${botName}. Asla unutma: ${botName}.`,
@@ -12,21 +12,255 @@ const CONFIG_FILE = path.join(BASE_DIR, 'config.json');
12
12
 
13
13
  const DIRS = ['sources', 'concepts', 'cache', 'skills', 'memory', 'sessions', 'backups'];
14
14
 
15
+ // v5.6.4: TAM MODEL KATALOGU - 12 provider, 200+ model
16
+ // Her provider: { name, url, models: [...], default }
17
+ // models: [ { id, label, tier, desc, cost } ] - tier ile gorsel siralama
15
18
  const PROVIDER_PRESETS = {
16
- groq: { url: 'https://api.groq.com/openai/v1', model: 'llama-3.3-70b-versatile' },
17
- openai: { url: 'https://api.openai.com/v1', model: 'gpt-4o' },
18
- anthropic:{ url: 'https://api.anthropic.com', model: 'claude-sonnet-4-6' },
19
- deepseek: { url: 'https://api.deepseek.com/v1', model: 'deepseek-chat' },
20
- ollama: { url: 'http://localhost:11434/v1', model: 'llama3.3' },
21
- // MiniMax özel endpoint gerekiyor (/v1/text/chatcompletion_v2)
22
- // OpenAI uyumlu DEĞİL llm_task ve api.js bunu tespit edip yönlendiriyor
23
- minimax: { url: 'https://api.minimax.io', model: 'MiniMax-M2.5' },
24
- // OpenRouter 100+ model, tek key ile hepsine erişim
25
- openrouter: { url: 'https://openrouter.ai/api/v1', model: 'meta-llama/llama-3.3-70b-instruct:free' },
26
- // Together AI
27
- together: { url: 'https://api.together.xyz/v1', model: 'meta-llama/Llama-3.3-70B-Instruct-Turbo' },
19
+ openai: {
20
+ name: 'OpenAI (GPT)',
21
+ url: 'https://api.openai.com/v1',
22
+ models: [
23
+ // Reasoning (Yeni nesil)
24
+ { id: 'o3', label: 'o3', tier: 'reasoning', desc: 'En güçlü reasoning', cost: '$15/$60 per 1M' },
25
+ { id: 'o3-mini', label: 'o3-mini', tier: 'reasoning', desc: 'Reasoning ucuz', cost: '$1.10/$4.40 per 1M' },
26
+ { id: 'o1-pro', label: 'o1-pro', tier: 'reasoning', desc: 'Pro reasoning', cost: '$150/$600 per 1M' },
27
+ { id: 'o1', label: 'o1', tier: 'reasoning', desc: 'Reasoning', cost: '$15/$60 per 1M' },
28
+ { id: 'o1-mini', label: 'o1-mini', tier: 'reasoning', desc: 'Reasoning ucuz', cost: '$3/$12 per 1M' },
29
+ // GPT-5 (Yeni)
30
+ { id: 'gpt-5', label: 'GPT-5', tier: 'flagship', desc: 'En yeni flagship', cost: '$5/$15 per 1M (est)' },
31
+ { id: 'gpt-5-mini', label: 'GPT-5 mini', tier: 'flagship', desc: 'GPT-5 ucuz', cost: '$0.50/$1.50 per 1M (est)' },
32
+ { id: 'gpt-5-nano', label: 'GPT-5 nano', tier: 'flagship', desc: 'GPT-5 en ucuz', cost: '$0.10/$0.30 per 1M (est)' },
33
+ // GPT-4.1 (Yeni)
34
+ { id: 'gpt-4.1', label: 'GPT-4.1', tier: 'flagship', desc: 'GPT-4.1 gelişmiş', cost: '$5/$15 per 1M' },
35
+ { id: 'gpt-4.1-mini', label: 'GPT-4.1 mini', tier: 'flagship', desc: 'GPT-4.1 ucuz', cost: '$0.80/$3.20 per 1M' },
36
+ { id: 'gpt-4.1-nano', label: 'GPT-4.1 nano', tier: 'flagship', desc: 'GPT-4.1 en ucuz', cost: '$0.20/$0.80 per 1M' },
37
+ // GPT-4o
38
+ { id: 'gpt-4o', label: 'GPT-4o', tier: 'flagship', desc: 'GPT-4o multimodal', cost: '$5/$15 per 1M' },
39
+ { id: 'gpt-4o-mini', label: 'GPT-4o mini', tier: 'balanced', desc: 'GPT-4o ucuz', cost: '$0.15/$0.60 per 1M' },
40
+ { id: 'gpt-4o-2024-08-06', label: 'GPT-4o (Aug 2024)', tier: 'flagship', desc: 'Sabit tarihli', cost: '$5/$15 per 1M' },
41
+ // GPT-4 Turbo
42
+ { id: 'gpt-4-turbo', label: 'GPT-4 Turbo', tier: 'flagship', desc: 'GPT-4 Turbo', cost: '$10/$30 per 1M' },
43
+ { id: 'gpt-4-turbo-preview', label: 'GPT-4 Turbo Preview', tier: 'flagship', desc: 'Preview', cost: '$10/$30 per 1M' },
44
+ // GPT-4 klasik
45
+ { id: 'gpt-4', label: 'GPT-4', tier: 'classic', desc: 'Klasik GPT-4', cost: '$30/$60 per 1M' },
46
+ { id: 'gpt-4-32k', label: 'GPT-4 32K', tier: 'classic', desc: 'GPT-4 uzun context', cost: '$60/$120 per 1M' },
47
+ // GPT-3.5
48
+ { id: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', tier: 'fast', desc: 'Çok ucuz', cost: '$0.50/$1.50 per 1M' },
49
+ { id: 'gpt-3.5-turbo-16k', label: 'GPT-3.5 Turbo 16K', tier: 'fast', desc: 'Uzun context ucuz', cost: '$3/$4 per 1M' },
50
+ { id: 'gpt-3.5-turbo-instruct', label: 'GPT-3.5 Instruct', tier: 'fast', desc: 'Instruction tuned', cost: '$1.50/$2 per 1M' },
51
+ ],
52
+ default: 'gpt-4o-mini',
53
+ },
54
+ anthropic: {
55
+ name: 'Anthropic (Claude)',
56
+ url: 'https://api.anthropic.com/v1',
57
+ models: [
58
+ { id: 'claude-opus-4-20250514', label: 'Claude Opus 4', tier: 'flagship', desc: 'En güçlü', cost: '$15/$75 per 1M' },
59
+ { id: 'claude-opus-4-1-20250805', label: 'Claude Opus 4.1', tier: 'flagship', desc: 'En yeni Opus', cost: '$15/$75 per 1M' },
60
+ { id: 'claude-sonnet-4-20250514', label: 'Claude Sonnet 4', tier: 'flagship', desc: 'Dengeli güçlü', cost: '$3/$15 per 1M' },
61
+ { id: 'claude-sonnet-4-1-20250805', label: 'Claude Sonnet 4.1', tier: 'flagship', desc: 'Sonnet 4.1', cost: '$3/$15 per 1M' },
62
+ { id: 'claude-3-7-sonnet-20250219', label: 'Claude 3.7 Sonnet', tier: 'flagship', desc: '3.7 Sonnet', cost: '$3/$15 per 1M' },
63
+ { id: 'claude-3-5-sonnet-20241022', label: 'Claude 3.5 Sonnet (New)', tier: 'balanced', desc: 'Yeni Sonnet', cost: '$3/$15 per 1M' },
64
+ { id: 'claude-3-5-sonnet-20240620', label: 'Claude 3.5 Sonnet (Old)', tier: 'balanced', desc: 'Eski Sonnet', cost: '$3/$15 per 1M' },
65
+ { id: 'claude-3-5-haiku-20241022', label: 'Claude 3.5 Haiku', tier: 'fast', desc: 'Hızlı', cost: '$0.80/$4 per 1M' },
66
+ { id: 'claude-3-haiku-20240307', label: 'Claude 3 Haiku', tier: 'fast', desc: 'Çok hızlı', cost: '$0.25/$1.25 per 1M' },
67
+ { id: 'claude-3-opus-20240229', label: 'Claude 3 Opus (legacy)', tier: 'classic', desc: 'Eski Opus', cost: '$15/$75 per 1M' },
68
+ { id: 'claude-3-sonnet-20240229', label: 'Claude 3 Sonnet (legacy)', tier: 'classic', desc: 'Eski Sonnet', cost: '$3/$15 per 1M' },
69
+ { id: 'claude-2-1', label: 'Claude 2.1 (legacy)', tier: 'classic', desc: 'Çok eski', cost: '$8/$24 per 1M' },
70
+ ],
71
+ default: 'claude-3-5-haiku-20241022',
72
+ },
73
+ gemini: {
74
+ name: 'Google Gemini',
75
+ url: 'https://generativelanguage.googleapis.com/v1beta',
76
+ models: [
77
+ // Gemini 2.5
78
+ { id: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', tier: 'flagship', desc: 'En güçlü reasoning', cost: '$1.25-$2.50/$10-$15 per 1M' },
79
+ { id: 'gemini-2.5-pro-exp-03-25', label: 'Gemini 2.5 Pro (Exp)', tier: 'flagship', desc: 'Experimental Pro', cost: 'Free during preview' },
80
+ { id: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', tier: 'balanced', desc: 'Adaptive thinking', cost: '$0.15/$0.60 per 1M' },
81
+ { id: 'gemini-2.5-flash-thinking', label: 'Gemini 2.5 Flash Thinking', tier: 'balanced', desc: 'Reasoning + hız', cost: '$0.15/$0.60 per 1M' },
82
+ // Gemini 2.0
83
+ { id: 'gemini-2.0-pro', label: 'Gemini 2.0 Pro', tier: 'flagship', desc: 'Güçlü multimodal', cost: '$1.25/$5 per 1M' },
84
+ { id: 'gemini-2.0-pro-exp', label: 'Gemini 2.0 Pro Exp', tier: 'flagship', desc: 'Experimental Pro', cost: 'Free during preview' },
85
+ { id: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash', tier: 'balanced', desc: 'Hızlı multimodal', cost: '$0.075/$0.30 per 1M' },
86
+ { id: 'gemini-2.0-flash-exp', label: 'Gemini 2.0 Flash Exp', tier: 'balanced', desc: 'Experimental Flash', cost: 'Free during preview' },
87
+ { id: 'gemini-2.0-flash-lite', label: 'Gemini 2.0 Flash-Lite', tier: 'fast', desc: 'Çok ucuz', cost: '$0.018/$0.072 per 1M' },
88
+ { id: 'gemini-2.0-flash-thinking-exp-1219', label: 'Gemini 2.0 Flash Thinking Exp', tier: 'fast', desc: 'Thinking experimental', cost: 'Free during preview' },
89
+ // Gemini 1.5
90
+ { id: 'gemini-1.5-pro', label: 'Gemini 1.5 Pro', tier: 'flagship', desc: 'Stabil güçlü', cost: '$1.25/$5 per 1M' },
91
+ { id: 'gemini-1.5-pro-latest', label: 'Gemini 1.5 Pro Latest', tier: 'flagship', desc: 'En son 1.5 Pro', cost: '$1.25/$5 per 1M' },
92
+ { id: 'gemini-1.5-flash', label: 'Gemini 1.5 Flash', tier: 'balanced', desc: 'Hızlı', cost: '$0.075/$0.30 per 1M' },
93
+ { id: 'gemini-1.5-flash-latest', label: 'Gemini 1.5 Flash Latest', tier: 'balanced', desc: 'En son Flash', cost: '$0.075/$0.30 per 1M' },
94
+ { id: 'gemini-1.5-flash-8b', label: 'Gemini 1.5 Flash 8B', tier: 'fast', desc: 'Çok hızlı', cost: '$0.0375/$0.15 per 1M' },
95
+ { id: 'gemini-1.5-flash-8b-latest', label: 'Gemini 1.5 Flash 8B Latest', tier: 'fast', desc: 'En son 8B', cost: '$0.0375/$0.15 per 1M' },
96
+ { id: 'gemini-1.5-pro-002', label: 'Gemini 1.5 Pro 002', tier: 'flagship', desc: 'Spesifik versiyon', cost: '$1.25/$5 per 1M' },
97
+ { id: 'gemini-1.5-flash-002', label: 'Gemini 1.5 Flash 002', tier: 'balanced', desc: 'Spesifik versiyon', cost: '$0.075/$0.30 per 1M' },
98
+ // Gemma (Açık kaynak Gemini)
99
+ { id: 'gemma-2-27b-it', label: 'Gemma 2 27B IT', tier: 'flagship', desc: 'Google açık kaynak', cost: 'Free (rate limit)' },
100
+ { id: 'gemma-2-9b-it', label: 'Gemma 2 9B IT', tier: 'balanced', desc: 'Açık kaynak küçük', cost: 'Free (rate limit)' },
101
+ { id: 'gemma-2-2b-it', label: 'Gemma 2 2B IT', tier: 'fast', desc: 'Çok hafif', cost: 'Free (rate limit)' },
102
+ // Özel
103
+ { id: 'gemini-nano', label: 'Gemini Nano (preview)', tier: 'fast', desc: 'Çok hafif', cost: 'Ücretsiz (rate limit)' },
104
+ { id: 'gemini-1.0-pro', label: 'Gemini 1.0 Pro (legacy)', tier: 'classic', desc: 'Eski', cost: '$0.50/$1.50 per 1M' },
105
+ { id: 'gemini-1.0-pro-vision', label: 'Gemini 1.0 Pro Vision (legacy)', tier: 'classic', desc: 'Eski vision', cost: '$0.50/$1.50 per 1M' },
106
+ // Embedding
107
+ { id: 'text-embedding-004', label: 'Text Embedding 004', tier: 'embedding', desc: 'Embedding', cost: '$0.025 per 1M' },
108
+ ],
109
+ default: 'gemini-2.0-flash',
110
+ },
111
+ groq: {
112
+ name: 'Groq (hızlı + ücretsiz)',
113
+ url: 'https://api.groq.com/openai/v1',
114
+ models: [
115
+ { id: 'llama-3.3-70b-versatile', label: 'Llama 3.3 70B Versatile', tier: 'flagship', desc: 'En güçlü açık', cost: 'FREE' },
116
+ { id: 'llama-3.3-70b-specdec', label: 'Llama 3.3 70B SpecDec', tier: 'flagship', desc: 'Speculative decoding', cost: 'FREE' },
117
+ { id: 'llama-3.1-70b-versatile', label: 'Llama 3.1 70B Versatile', tier: 'flagship', desc: 'Alternatif güçlü', cost: 'FREE' },
118
+ { id: 'qwen-2.5-72b', label: 'Qwen 2.5 72B', tier: 'flagship', desc: 'Çince + İngilizce', cost: 'FREE' },
119
+ { id: 'qwen-qwq-32b', label: 'Qwen QwQ 32B (reasoning)', tier: 'flagship', desc: 'Reasoning', cost: 'FREE' },
120
+ { id: 'llama-3.1-8b-instant', label: 'Llama 3.1 8B Instant', tier: 'fast', desc: 'Çok hızlı', cost: 'FREE' },
121
+ { id: 'llama-3-8b-8192', label: 'Llama 3 8B', tier: 'fast', desc: 'Standart 8K context', cost: 'FREE' },
122
+ { id: 'gemma-2-9b-it', label: 'Gemma 2 9B IT', tier: 'balanced', desc: 'Google açık kaynak', cost: 'FREE' },
123
+ { id: 'mixtral-8x7b-32768', label: 'Mixtral 8x7B 32K', tier: 'fast', desc: 'Hızlı inference', cost: 'FREE' },
124
+ { id: 'whisper-large-v3', label: 'Whisper Large v3', tier: 'audio', desc: 'Ses transkripsiyon', cost: 'FREE' },
125
+ { id: 'whisper-large-v3-turbo', label: 'Whisper Large v3 Turbo', tier: 'audio', desc: 'Hızlı ses', cost: 'FREE' },
126
+ ],
127
+ default: 'llama-3.3-70b-versatile',
128
+ },
129
+ deepseek: {
130
+ name: 'DeepSeek',
131
+ url: 'https://api.deepseek.com/v1',
132
+ models: [
133
+ { id: 'deepseek-reasoner', label: 'DeepSeek Reasoner (R1)', tier: 'flagship', desc: 'Reasoning odaklı', cost: '~$0.55/$2.19 per 1M' },
134
+ { id: 'deepseek-coder', label: 'DeepSeek Coder V2', tier: 'flagship', desc: 'Kod için optimize', cost: '~$0.14/$0.28 per 1M' },
135
+ { id: 'deepseek-chat', label: 'DeepSeek Chat V3', tier: 'balanced', desc: 'Genel amaçlı', cost: '~$0.14/$0.28 per 1M' },
136
+ { id: 'deepseek-coder-instruct', label: 'DeepSeek Coder Instruct', tier: 'balanced', desc: 'Instruction tuned', cost: '~$0.14/$0.28 per 1M' },
137
+ ],
138
+ default: 'deepseek-chat',
139
+ },
140
+ ollama: {
141
+ name: 'Ollama (local)',
142
+ url: 'http://localhost:11434/v1',
143
+ models: [
144
+ { id: 'llama3.3', label: 'Llama 3.3 (70B)', tier: 'flagship', desc: 'En güçlü local', cost: 'FREE (local)' },
145
+ { id: 'llama3.2', label: 'Llama 3.2 (3B)', tier: 'balanced', desc: 'Dengeli', cost: 'FREE (local)' },
146
+ { id: 'llama3.1', label: 'Llama 3.1 (8B)', tier: 'flagship', desc: 'Güçlü', cost: 'FREE (local)' },
147
+ { id: 'llama3.2:1b', label: 'Llama 3.2 1B', tier: 'fast', desc: 'Çok hafif', cost: 'FREE (local)' },
148
+ { id: 'llama2', label: 'Llama 2 (7B)', tier: 'classic', desc: 'Eski', cost: 'FREE (local)' },
149
+ { id: 'qwen2.5', label: 'Qwen 2.5 (7B)', tier: 'balanced', desc: 'Çince + İngilizce', cost: 'FREE (local)' },
150
+ { id: 'qwen2.5-coder', label: 'Qwen 2.5 Coder (7B)', tier: 'balanced', desc: 'Kod için', cost: 'FREE (local)' },
151
+ { id: 'gemma2', label: 'Gemma 2 (2B)', tier: 'fast', desc: 'Google açık kaynak', cost: 'FREE (local)' },
152
+ { id: 'gemma2:27b', label: 'Gemma 2 (27B)', tier: 'flagship', desc: 'Büyük Gemma', cost: 'FREE (local)' },
153
+ { id: 'mistral', label: 'Mistral (7B)', tier: 'balanced', desc: 'Hızlı', cost: 'FREE (local)' },
154
+ { id: 'mixtral', label: 'Mixtral (8x7B)', tier: 'flagship', desc: 'MoE mimari', cost: 'FREE (local)' },
155
+ { id: 'phi3', label: 'Phi-3 Mini', tier: 'fast', desc: 'Microsoft küçük', cost: 'FREE (local)' },
156
+ { id: 'codellama', label: 'Code Llama (7B)', tier: 'balanced', desc: 'Kod için', cost: 'FREE (local)' },
157
+ ],
158
+ default: 'llama3.2',
159
+ },
160
+ minimax: {
161
+ name: 'Minimax (M2.5)',
162
+ url: 'https://api.minimax.io',
163
+ models: [
164
+ { id: 'MiniMax-M2.5', label: 'M2.5', tier: 'flagship', desc: 'En güçlü', cost: 'API key' },
165
+ { id: 'MiniMax-M2.5-highspeed', label: 'M2.5 HighSpeed', tier: 'flagship', desc: 'Hızlı M2.5', cost: 'API key' },
166
+ { id: 'MiniMax-M2-7k', label: 'M2 (7K context)', tier: 'balanced', desc: 'Önceki', cost: 'API key' },
167
+ { id: 'MiniMax-M2-32k', label: 'M2 (32K context)', tier: 'balanced', desc: 'Uzun context', cost: 'API key' },
168
+ { id: 'MiniMax-M2-128k', label: 'M2 (128K context)', tier: 'flagship', desc: 'Çok uzun context', cost: 'API key' },
169
+ { id: 'MiniMax-realtime', label: 'M2 Realtime', tier: 'fast', desc: 'Hızlı', cost: 'API key' },
170
+ ],
171
+ default: 'MiniMax-M2.5',
172
+ },
173
+ openrouter: {
174
+ name: 'OpenRouter (100+ model)',
175
+ url: 'https://openrouter.ai/api/v1',
176
+ models: [
177
+ // Premium
178
+ { id: 'anthropic/claude-3.5-sonnet', label: 'Claude 3.5 Sonnet', tier: 'flagship', cost: '~$3/$15 per 1M' },
179
+ { id: 'anthropic/claude-3-opus', label: 'Claude 3 Opus', tier: 'flagship', cost: '~$15/$75 per 1M' },
180
+ { id: 'openai/gpt-4o', label: 'GPT-4o', tier: 'flagship', cost: '~$5/$15 per 1M' },
181
+ { id: 'openai/gpt-4-turbo', label: 'GPT-4 Turbo', tier: 'flagship', cost: '~$10/$30 per 1M' },
182
+ { id: 'google/gemini-pro-1.5', label: 'Gemini Pro 1.5', tier: 'flagship', cost: '~$1.25/$5 per 1M' },
183
+ { id: 'meta-llama/llama-3.1-405b-instruct', label: 'Llama 3.1 405B', tier: 'flagship', desc: 'En büyük açık model', cost: '~$2.70/$2.70 per 1M' },
184
+ // Mid-tier
185
+ { id: 'openai/gpt-4o-mini', label: 'GPT-4o mini', tier: 'balanced', cost: '~$0.15/$0.60 per 1M' },
186
+ { id: 'anthropic/claude-3-haiku', label: 'Claude 3 Haiku', tier: 'fast', cost: '~$0.25/$1.25 per 1M' },
187
+ { id: 'google/gemini-flash-1.5', label: 'Gemini Flash 1.5', tier: 'fast', cost: '~$0.075/$0.30 per 1M' },
188
+ { id: 'meta-llama/llama-3.1-70b-instruct', label: 'Llama 3.1 70B', tier: 'balanced', cost: '~$0.88/$0.88 per 1M' },
189
+ { id: 'mistralai/mistral-large', label: 'Mistral Large', tier: 'flagship', cost: '~$2/$6 per 1M' },
190
+ // Ücretsiz
191
+ { id: 'meta-llama/llama-3.1-8b-instruct:free', label: 'Llama 3.1 8B (FREE)', tier: 'fast', desc: 'Tamamen ücretsiz', cost: 'FREE' },
192
+ { id: 'mistralai/mistral-7b-instruct:free', label: 'Mistral 7B (FREE)', tier: 'fast', desc: 'Ücretsiz', cost: 'FREE' },
193
+ { id: 'google/gemma-2-9b-it:free', label: 'Gemma 2 9B (FREE)', tier: 'balanced', desc: 'Ücretsiz', cost: 'FREE' },
194
+ { id: 'meta-llama/llama-3.2-3b-instruct:free', label: 'Llama 3.2 3B (FREE)', tier: 'fast', desc: 'Ücretsiz', cost: 'FREE' },
195
+ ],
196
+ default: 'openai/gpt-4o-mini',
197
+ },
198
+ mistral: {
199
+ name: 'Mistral AI',
200
+ url: 'https://api.mistral.ai/v1',
201
+ models: [
202
+ { id: 'mistral-large-latest', label: 'Mistral Large 2', tier: 'flagship', cost: '~$2/$6 per 1M' },
203
+ { id: 'mistral-medium-latest', label: 'Mistral Medium', tier: 'balanced', cost: '~$0.7/$2.1 per 1M' },
204
+ { id: 'mistral-small-latest', label: 'Mistral Small', tier: 'fast', cost: '~$0.2/$0.6 per 1M' },
205
+ { id: 'codestral-latest', label: 'Codestral', tier: 'balanced', desc: 'Kod için optimize', cost: '~$0.2/$0.6 per 1M' },
206
+ { id: 'open-mistral-7b', label: 'Open Mistral 7B', tier: 'fast', cost: '~$0.25/$0.25 per 1M' },
207
+ { id: 'open-mixtral-8x7b', label: 'Open Mixtral 8x7B', tier: 'balanced', cost: '~$0.7/$0.7 per 1M' },
208
+ { id: 'mistral-tiny', label: 'Mistral Tiny', tier: 'fast', desc: 'En küçük', cost: '~$0.15/$0.15 per 1M' },
209
+ ],
210
+ default: 'mistral-small-latest',
211
+ },
212
+ cohere: {
213
+ name: 'Cohere',
214
+ url: 'https://api.cohere.ai/v1',
215
+ models: [
216
+ { id: 'command-r-plus', label: 'Command R+', tier: 'flagship', cost: '~$2.50/$10 per 1M' },
217
+ { id: 'command-r', label: 'Command R', tier: 'balanced', cost: '~$0.15/$0.60 per 1M' },
218
+ { id: 'command-light', label: 'Command Light', tier: 'fast', cost: '~$0.30/$0.60 per 1M' },
219
+ { id: 'c4ai-aya-23', label: 'C4AI Aya 23', tier: 'flagship', desc: 'Çok dilli', cost: '~$1/$1 per 1M' },
220
+ { id: 'c4ai-aya-23-8b', label: 'C4AI Aya 23 8B', tier: 'balanced', desc: 'Çok dilli küçük', cost: '~$0.50/$0.50 per 1M' },
221
+ { id: 'embed-english-v3.0', label: 'Embed English v3.0', tier: 'embedding', cost: '~$0.10 per 1M' },
222
+ { id: 'embed-multilingual-v3.0', label: 'Embed Multilingual v3.0', tier: 'embedding', cost: '~$0.10 per 1M' },
223
+ ],
224
+ default: 'command-r',
225
+ },
226
+ xai: {
227
+ name: 'xAI (Grok)',
228
+ url: 'https://api.x.ai/v1',
229
+ models: [
230
+ { id: 'grok-2-1212', label: 'Grok 2', tier: 'flagship', cost: '~$2/$10 per 1M' },
231
+ { id: 'grok-2-vision-1212', label: 'Grok 2 Vision', tier: 'flagship', desc: 'Multimodal', cost: '~$2/$10 per 1M' },
232
+ { id: 'grok-beta', label: 'Grok Beta', tier: 'balanced', cost: '~$5/$15 per 1M' },
233
+ { id: 'grok-vision-beta', label: 'Grok Vision Beta', tier: 'balanced', desc: 'Görsel', cost: '~$5/$15 per 1M' },
234
+ { id: 'grok-1.5', label: 'Grok 1.5', tier: 'fast', cost: '~$0.50/$1.50 per 1M' },
235
+ ],
236
+ default: 'grok-2-1212',
237
+ },
238
+ together: {
239
+ name: 'Together AI',
240
+ url: 'https://api.together.xyz/v1',
241
+ models: [
242
+ { id: 'meta-llama/Llama-3.3-70B-Instruct-Turbo', label: 'Llama 3.3 70B Turbo', tier: 'flagship', cost: '~$0.88/$0.88 per 1M' },
243
+ { id: 'meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo', label: 'Llama 3.2 90B Vision', tier: 'flagship', desc: 'Multimodal', cost: '~$1.20/$1.20 per 1M' },
244
+ { id: 'meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo', label: 'Llama 3.2 11B Vision', tier: 'balanced', desc: 'Vision ucuz', cost: '~$0.18/$0.18 per 1M' },
245
+ { id: 'meta-llama/Llama-3.2-3B-Instruct-Turbo', label: 'Llama 3.2 3B', tier: 'fast', cost: '~$0.06/$0.06 per 1M' },
246
+ { id: 'meta-llama/Llama-3.2-1B-Instruct-Turbo', label: 'Llama 3.2 1B', tier: 'fast', desc: 'Çok küçük', cost: '~$0.03/$0.03 per 1M' },
247
+ { id: 'mistralai/Mixtral-8x22B-Instruct-v0.1', label: 'Mixtral 8x22B', tier: 'flagship', cost: '~$1.20/$1.20 per 1M' },
248
+ { id: 'mistralai/Mixtral-8x7B-Instruct-v0.1', label: 'Mixtral 8x7B', tier: 'balanced', cost: '~$0.60/$0.60 per 1M' },
249
+ { id: 'Qwen/Qwen2.5-72B-Instruct-Turbo', label: 'Qwen 2.5 72B Turbo', tier: 'flagship', cost: '~$1.20/$1.20 per 1M' },
250
+ ],
251
+ default: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
252
+ },
253
+ custom: {
254
+ name: 'Custom URL',
255
+ url: '',
256
+ models: [
257
+ { id: 'custom', label: 'Custom', tier: 'custom', desc: 'Manuel model adı', cost: '?' },
258
+ ],
259
+ default: 'custom',
260
+ },
28
261
  };
29
262
 
263
+
30
264
  function rlQuestion(query) {
31
265
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
32
266
  return new Promise(resolve => {
@@ -83,21 +317,23 @@ async function cmdWizard() {
83
317
 
84
318
  const cfg = getConfig();
85
319
 
86
- // Step 1: Provider selection
87
- console.log(chalk.white(' Step 1: Provider'));
320
+ // v5.6.4: Step 1 - Provider + direkt model wizard (tier yok)
321
+ console.log(chalk.white(' Step 1: Provider & Model'));
88
322
  console.log(chalk.gray(' ─────────────────────────────────────────────'));
89
- const providerKeys = Object.keys(PROVIDER_PRESETS);
323
+
324
+ const providerKeys = Object.keys(PROVIDER_PRESETS).filter(k => k !== 'custom');
90
325
  const { provider } = await inquirer.prompt([{
91
326
  type: 'list',
92
327
  name: 'provider',
93
328
  message: ' AI Provider:',
94
329
  choices: [
95
330
  ...providerKeys.map(k => ({
96
- name: `${k.charAt(0).toUpperCase() + k.slice(1)} (${PROVIDER_PRESETS[k].model})`,
331
+ name: `${PROVIDER_PRESETS[k].name} (${PROVIDER_PRESETS[k].models.length} model)`,
97
332
  value: k,
98
333
  })),
99
334
  { name: 'Custom URL', value: 'custom' },
100
335
  ],
336
+ pageSize: 14,
101
337
  }]);
102
338
 
103
339
  let providerUrl, providerModel;
@@ -109,7 +345,54 @@ async function cmdWizard() {
109
345
  } else {
110
346
  const preset = PROVIDER_PRESETS[provider];
111
347
  providerUrl = preset.url;
112
- providerModel = preset.model;
348
+
349
+ // Direkt model listesi - tier gruplari ile
350
+ const { modelId } = await inquirer.prompt([{
351
+ type: 'list',
352
+ name: 'modelId',
353
+ message: ` Model sec (${preset.models.length} secenek):`,
354
+ choices: [
355
+ { name: '─────────────────────', disabled: true },
356
+ { name: '🟢 GÜÇLÜ / REASONING (en iyi)', disabled: true },
357
+ ...preset.models.filter(m => m.tier === 'flagship' || m.tier === 'reasoning').map(m => ({
358
+ name: ` ${m.label} (${m.cost})`,
359
+ value: m.id,
360
+ })),
361
+ { name: '─────────────────────', disabled: true },
362
+ { name: '🟡 ORTA (dengeli)', disabled: true },
363
+ ...preset.models.filter(m => m.tier === 'balanced').map(m => ({
364
+ name: ` ${m.label} (${m.cost})`,
365
+ value: m.id,
366
+ })),
367
+ { name: '─────────────────────', disabled: true },
368
+ { name: '🔵 HIZLI / UCUZ', disabled: true },
369
+ ...preset.models.filter(m => m.tier === 'fast').map(m => ({
370
+ name: ` ${m.label} (${m.cost})`,
371
+ value: m.id,
372
+ })),
373
+ { name: '─────────────────────', disabled: true },
374
+ { name: '⚪ KLASİK (legacy)', disabled: true },
375
+ ...preset.models.filter(m => m.tier === 'classic').map(m => ({
376
+ name: ` ${m.label} (${m.cost})`,
377
+ value: m.id,
378
+ })),
379
+ { name: '─────────────────────', disabled: true },
380
+ { name: '🔊 ÖZEL (audio/vision/embedding)', disabled: true },
381
+ ...preset.models.filter(m => ['audio', 'vision', 'embedding', 'custom'].includes(m.tier)).map(m => ({
382
+ name: ` ${m.label} (${m.cost})`,
383
+ value: m.id,
384
+ })),
385
+ { name: '─────────────────────', disabled: true },
386
+ { name: '✏️ Custom model adı (ileri düzey)', value: '__custom__' },
387
+ ],
388
+ pageSize: 20,
389
+ }]);
390
+
391
+ if (modelId === '__custom__') {
392
+ providerModel = await rlQuestion(` Model adı: `) || preset.default;
393
+ } else {
394
+ providerModel = modelId;
395
+ }
113
396
  console.log(chalk.gray(` URL: ${providerUrl}`));
114
397
  console.log(chalk.gray(` Model: ${providerModel}`));
115
398
  }
@@ -176,6 +459,24 @@ async function cmdWizard() {
176
459
  const botName = await rlQuestion(` Bot adı: `);
177
460
  if (botName) cfg.botName = botName;
178
461
 
462
+ // v5.6.5: Memory'deki botName/userName'i de guncelle
463
+ // Yoksa "naruto" yazsam bile eski "ichigo" cikar
464
+ try {
465
+ const memFile = path.join(BASE_DIR, (userName || cfg.userName || 'default').toLowerCase() + '.json');
466
+ let mem = {};
467
+ if (fs.existsSync(memFile)) {
468
+ try { mem = JSON.parse(fs.readFileSync(memFile, 'utf8')); } catch (e) {}
469
+ }
470
+ let memChanged = false;
471
+ if (botName && mem.botName !== botName) { mem.botName = botName; memChanged = true; }
472
+ if (userName && mem.name !== userName) { mem.name = userName; memChanged = true; }
473
+ if (memChanged) {
474
+ if (!fs.existsSync(BASE_DIR)) fs.mkdirSync(BASE_DIR, { recursive: true });
475
+ fs.writeFileSync(memFile, JSON.stringify(mem, null, 2), 'utf8');
476
+ console.log(chalk.gray(' ✓ Memory'deki botName/userName guncellendi'));
477
+ }
478
+ } catch (e) {}
479
+
179
480
  // Step 4: Kanal Entegrasyonları (isteğe bağlı, isteyen atlayabilir)
180
481
  console.log('');
181
482
  console.log(chalk.white(' Step 4: Kanal Entegrasyonları (opsiyonel)'));
@@ -327,14 +628,25 @@ async function validateApiKey(providerUrl, apiKey) {
327
628
  return new Promise((resolve) => {
328
629
  const https = require('https');
329
630
  const url = new URL(providerUrl);
330
- const endpoint = url.hostname.includes('minimax')
631
+ const isMM = url.hostname.includes('minimax') || url.hostname.includes('minimaxi');
632
+ const endpoint = isMM
331
633
  ? providerUrl.replace(/\/+$/, '') + '/v1/text/chatcompletion_v2'
332
634
  : providerUrl.replace(/\/+$/, '') + '/chat/completions';
635
+
636
+ // Her provider icin test modeli
637
+ let testModel = 'gpt-3.5-turbo';
638
+ if (providerUrl.includes('groq.com')) testModel = 'llama-3.1-8b-instant';
639
+ else if (providerUrl.includes('anthropic.com')) testModel = 'claude-3-haiku-20240307';
640
+ else if (isMM) testModel = 'MiniMax-M2.5';
641
+ else if (providerUrl.includes('gemini')) testModel = 'gemini-1.5-flash';
642
+ else if (providerUrl.includes('mistral.ai')) testModel = 'mistral-tiny';
643
+ else if (providerUrl.includes('openrouter.ai')) testModel = 'meta-llama/llama-3.1-8b-instruct:free';
644
+ else if (providerUrl.includes('deepseek.com')) testModel = 'deepseek-chat';
333
645
 
334
646
  const data = JSON.stringify({
335
- model: 'test',
336
- messages: [{ role: 'user', content: 'ping' }],
337
- max_tokens: 5
647
+ model: testModel,
648
+ messages: [{ role: 'user', content: 'hi' }],
649
+ max_tokens: 1 // Minimum token — sadece auth kontrolu
338
650
  });
339
651
 
340
652
  const u = new URL(endpoint);
@@ -348,9 +660,16 @@ async function validateApiKey(providerUrl, apiKey) {
348
660
  'Content-Type': 'application/json',
349
661
  'Content-Length': Buffer.byteLength(data)
350
662
  },
351
- timeout: 10000
663
+ timeout: 8000
352
664
  }, (res) => {
353
- resolve(res.statusCode >= 200 && res.statusCode < 400);
665
+ let body = '';
666
+ res.on('data', c => body += c);
667
+ res.on('end', () => {
668
+ // Status 200-299 ve body'de 'error' yoksa gecerli
669
+ const statusOk = res.statusCode >= 200 && res.statusCode < 300;
670
+ const bodyOk = !body.includes('"error"') && !body.includes('"invalid_api_key"') && !body.includes('"Unauthorized"');
671
+ resolve(statusOk && bodyOk);
672
+ });
354
673
  });
355
674
  req.on('error', () => resolve(false));
356
675
  req.on('timeout', () => { req.destroy(); resolve(false); });