vantuz 3.5.8 → 3.5.10
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/index.js +188 -2
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -85,7 +85,8 @@ async function main() {
|
|
|
85
85
|
console.log(boxen(chalk.white('🔒 VANTUZ Lisans Aktivasyonu\nDevam etmek için satıcınızdan aldığınız anahtarı girin.'), { padding: 1, borderColor: 'cyan', borderStyle: 'classic' }));
|
|
86
86
|
await activateLicense();
|
|
87
87
|
} else {
|
|
88
|
-
const
|
|
88
|
+
const expiryDate = licenseStatus.data.expires || licenseStatus.data.expiry || new Date(Date.now() + 365*24*60*60*1000).toISOString();
|
|
89
|
+
const daysLeft = Math.floor((new Date(expiryDate) - new Date()) / (1000 * 60 * 60 * 24));
|
|
89
90
|
console.log(chalk.green(`✅ Lisanslı: ${licenseStatus.data.customer} (Kalan Süre: ${daysLeft} Gün)`));
|
|
90
91
|
await new Promise(r => setTimeout(r, 1000));
|
|
91
92
|
}
|
|
@@ -116,6 +117,7 @@ async function main() {
|
|
|
116
117
|
{ name: '📦 Sipariş Yönetimi', value: 'orders' },
|
|
117
118
|
{ name: '🛍️ Ürün & Stok (Vision AI)', value: 'products' },
|
|
118
119
|
{ name: '🧠 Pazar Analizi', value: 'ai' },
|
|
120
|
+
{ name: '💬 AI Takımı ile Sohbet', value: 'ai_chat' },
|
|
119
121
|
{ name: '➕ Mağaza Ekle', value: 'add_store' },
|
|
120
122
|
{ name: '⚙️ Ayarlar', value: 'settings' },
|
|
121
123
|
{ name: '🚪 Çıkış', value: 'exit' }
|
|
@@ -274,7 +276,14 @@ async function handleAction(action) {
|
|
|
274
276
|
const stores = await db.Store.findAll();
|
|
275
277
|
console.log(chalk.white(`\n 📈 Toplam Mağaza: ${stores.length}`));
|
|
276
278
|
console.log(chalk.white(` 🛒 Aktif Ürünler: ${await db.Product.count()}`));
|
|
277
|
-
|
|
279
|
+
|
|
280
|
+
// Trendyol: new, preparing, approved, kargolanmadi => bekleyen sipariş
|
|
281
|
+
const pendingOrders = await db.Order.count({
|
|
282
|
+
where: {
|
|
283
|
+
status: { in: ['new', 'preparing', 'approved', 'kargolanmadi', 'pending'] }
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
console.log(chalk.white(` 📦 Bekleyen Siparişler: ${pendingOrders}`));
|
|
278
287
|
|
|
279
288
|
console.log(chalk.cyan('\n 🤖 Yapay Zeka Analizi:'));
|
|
280
289
|
console.log(chalk.white(' • Fiyatlandırma önerileri hazırlanıyor...'));
|
|
@@ -299,6 +308,7 @@ async function handleAction(action) {
|
|
|
299
308
|
message: 'Ayarlar:',
|
|
300
309
|
choices: [
|
|
301
310
|
'🔑 Lisans Anahtarı Değiştir',
|
|
311
|
+
'🤖 Yapay Zeka Model Ayarları',
|
|
302
312
|
'🔔 Bildirim Ayarları',
|
|
303
313
|
'🕐 Otomatik Senkron Saatleri',
|
|
304
314
|
'📱 Telegram/WhatsApp Bağlantısı',
|
|
@@ -318,11 +328,187 @@ async function handleAction(action) {
|
|
|
318
328
|
} else {
|
|
319
329
|
console.log(chalk.red(' ❌ Geçersiz anahtar: ' + result.reason));
|
|
320
330
|
}
|
|
331
|
+
} else if (settingAction === '🤖 Yapay Zeka Model Ayarları') {
|
|
332
|
+
const { provider } = await inquirer.prompt([
|
|
333
|
+
{
|
|
334
|
+
type: 'list',
|
|
335
|
+
name: 'provider',
|
|
336
|
+
message: 'AI Sağlayıcı:',
|
|
337
|
+
choices: ['OpenAI', 'Anthropic', 'Google Gemini', 'xAI Grok', 'Geri']
|
|
338
|
+
}
|
|
339
|
+
]);
|
|
340
|
+
if (provider !== 'Geri') {
|
|
341
|
+
config.set('ai.provider', provider);
|
|
342
|
+
console.log(chalk.green(' ✅ AI sağlayıcı değiştirildi: ' + provider));
|
|
343
|
+
}
|
|
321
344
|
} else if (settingAction === '🔙 Geri') {
|
|
322
345
|
return;
|
|
323
346
|
}
|
|
324
347
|
break;
|
|
325
348
|
|
|
349
|
+
case 'ai_chat':
|
|
350
|
+
// Önce firma bilgilerini kontrol et
|
|
351
|
+
let companyInfo = config.get('companyInfo');
|
|
352
|
+
|
|
353
|
+
if (!companyInfo || !companyInfo.market) {
|
|
354
|
+
console.log(chalk.cyan('\n🏢 FİRMA KAYDI'));
|
|
355
|
+
console.log(chalk.grey('─'.repeat(40)));
|
|
356
|
+
console.log(chalk.yellow(' İlk kez kullanıyorsunuz! Size özel deneyim için birkaç soru:\n'));
|
|
357
|
+
|
|
358
|
+
const info = await inquirer.prompt([
|
|
359
|
+
{ type: 'input', name: 'companyName', message: 'Firma Adı:' },
|
|
360
|
+
{ type: 'input', name: 'market', message: 'Hedef Pazar (Trendyol/Hepsiburada/Amazon/n11/Çiçeksepeti/Tümü):' },
|
|
361
|
+
{ type: 'input', name: 'products', message: 'Ne satıyorsunuz? (Ürün kategorisi):' },
|
|
362
|
+
{ type: 'input', name: 'targetCountry', message: 'Yurt dışı satış hedefi varsa (opsiyonel):' }
|
|
363
|
+
]);
|
|
364
|
+
|
|
365
|
+
companyInfo = {
|
|
366
|
+
...info,
|
|
367
|
+
registeredAt: new Date().toISOString()
|
|
368
|
+
};
|
|
369
|
+
config.set('companyInfo', companyInfo);
|
|
370
|
+
console.log(chalk.green('\n ✅ Firma bilgileri kaydedildi!\n'));
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
console.log(chalk.cyan('\n💬 VANTUZ AI ASİSTAN'));
|
|
374
|
+
console.log(chalk.grey('─'.repeat(40)));
|
|
375
|
+
console.log(chalk.white(` 🏢 ${companyInfo.companyName} | 📍 ${companyInfo.market} | 🛍️ ${companyInfo.products}\n`));
|
|
376
|
+
|
|
377
|
+
const { chatMode } = await inquirer.prompt([
|
|
378
|
+
{
|
|
379
|
+
type: 'list',
|
|
380
|
+
name: 'chatMode',
|
|
381
|
+
message: 'Sohbet Modu:',
|
|
382
|
+
choices: [
|
|
383
|
+
'🐺 Vantuz ile Direkt Sohbet',
|
|
384
|
+
'👥 Ekip Toplantısı (Tüm Ajanlar)',
|
|
385
|
+
'🐺 @milo - Strateji & Büyüme',
|
|
386
|
+
'📊 @josh - Finans & Raporlama',
|
|
387
|
+
'📢 @marketing - İçerik & SEO',
|
|
388
|
+
'🔧 @dev - Teknik Destek',
|
|
389
|
+
'🔙 Geri'
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
]);
|
|
393
|
+
|
|
394
|
+
if (chatMode === '🔙 Geri') break;
|
|
395
|
+
|
|
396
|
+
console.log(chalk.green('\n ✓ Sohbete başladınız.'));
|
|
397
|
+
console.log(chalk.grey(' (Çıkmak için "exit" yazın)\n'));
|
|
398
|
+
|
|
399
|
+
// Ana sohbet döngüsü
|
|
400
|
+
while (true) {
|
|
401
|
+
const { message } = await inquirer.prompt([
|
|
402
|
+
{ type: 'input', name: 'message', message: chalk.cyan('💬 ') }
|
|
403
|
+
]);
|
|
404
|
+
|
|
405
|
+
if (message === 'exit' || message === 'çıkış' || message === 'q') break;
|
|
406
|
+
|
|
407
|
+
// Basit yanıt sistemi (gerçek AI entegrasyonu sonra)
|
|
408
|
+
let response = '';
|
|
409
|
+
const lowerMsg = message.toLowerCase();
|
|
410
|
+
|
|
411
|
+
if (chatMode === '🐺 Vantuz ile Direkt Sohbet') {
|
|
412
|
+
if (lowerMsg.includes('pazar') || lowerMsg.includes('araştır')) {
|
|
413
|
+
response = `📊 ${companyInfo.market} pazarında ${companyInfo.products} kategorisinde araştırma yapıyorum...\n\n` +
|
|
414
|
+
`• Rakiplerin ortalama fiyat aralığı belirleniyor\n` +
|
|
415
|
+
`• En çok satan ürünler tespit ediliyor\n` +
|
|
416
|
+
`• Kar marjı analizi hazırlanıyor\n\n` +
|
|
417
|
+
`🔄 Detaylı rapor için "@milo" ile görüşebilirsiniz.`;
|
|
418
|
+
} else if (lowerMsg.includes('stok') || lowerMsg.includes('ürün')) {
|
|
419
|
+
response = `📦 Ürün ve stok yönetimi:\n\n` +
|
|
420
|
+
`• Trendyol'da ${companyInfo.products} kategorisinde X ürününüz var\n` +
|
|
421
|
+
`• Yüksek stoklu ürünler: Ürün A, Ürün B\n` +
|
|
422
|
+
`• Kritik stok: 5 ürün\n\n` +
|
|
423
|
+
`🤖 Detaylı analiz için "@josh" ile görüşebilirsiniz.`;
|
|
424
|
+
} else if (lowerMsg.includes('fiyat') || lowerMsg.includes('kar')) {
|
|
425
|
+
response = `💰 Fiyatlandırma önerileri:\n\n` +
|
|
426
|
+
`• Mevcut kar marjı: %25\n` +
|
|
427
|
+
`• Rakip ortalaması: %22\n` +
|
|
428
|
+
`• Önerilen: Fiyatları %3 artır\n\n` +
|
|
429
|
+
`📈 Detaylı analiz için "@josh" ile görüşün.`;
|
|
430
|
+
} else if (lowerMsg.includes('komut') || lowerMsg.includes('ne yaparsın')) {
|
|
431
|
+
response = `🤖 Vantuz olarak yapabileceklerim:\n\n` +
|
|
432
|
+
`• 📊 Pazar araştırması yapabilirim\n` +
|
|
433
|
+
`• 📦 Stok takibi ve öneriler\n` +
|
|
434
|
+
`• 💰 Fiyat optimizasyonu\n` +
|
|
435
|
+
`• 📢 SEO uyumlu ürün açıklamaları\n` +
|
|
436
|
+
`• 👥 Ekip toplantısı düzenleyebilirim\n\n` +
|
|
437
|
+
`Bana ne yapmamı istersiniz?`;
|
|
438
|
+
} else {
|
|
439
|
+
response = `💬 Anladım: "${message}"\n\n` +
|
|
440
|
+
`📌 Şu komutları deneyebilirsiniz:\n` +
|
|
441
|
+
` • "pazar araştır" - Pazar analizi\n` +
|
|
442
|
+
` • "stok durumu" - Ürün takibi\n` +
|
|
443
|
+
` • "fiyat önerisi" - Kar marjı\n` +
|
|
444
|
+
` • "toplantı yap" - Ekip toplantısı\n\n` +
|
|
445
|
+
`Veya direkt bir ajanla konuşabilirsiniz (@milo, @josh, @marketing, @dev)`;
|
|
446
|
+
}
|
|
447
|
+
} else if (chatMode === '👥 Ekip Toplantısı') {
|
|
448
|
+
response = `👥 **EKİP TOPLANTISI**\n\n` +
|
|
449
|
+
`📋 Güncel Durum:\n` +
|
|
450
|
+
`• @milo: Strateji belirleniyor\n` +
|
|
451
|
+
`• @josh: Finansal rapor hazırlanıyor\n` +
|
|
452
|
+
`• @marketing: Yeni kampanya planlanıyor\n` +
|
|
453
|
+
`• @dev: Sistem sağlığı: ✅\n\n` +
|
|
454
|
+
`💬 Toplantı konusu: "${message}"\n\n` +
|
|
455
|
+
`🔄 Herkesin görüşünü alıyorum...`;
|
|
456
|
+
} else {
|
|
457
|
+
// Belirli ajan
|
|
458
|
+
const agentName = chatMode.match(/@(\w+)/)?.[1] || 'asistan';
|
|
459
|
+
response = `🐺 **@${agentName}** diyor ki:\n\n` +
|
|
460
|
+
`"${message}" mesajınızı aldım.\n\n` +
|
|
461
|
+
`✅ Görevlerinizi analiz ediyorum.\n` +
|
|
462
|
+
`📊 Gerektiğinde diğer ajanlarla koordinasyon sağlayacağım.\n\n` +
|
|
463
|
+
`💬 Başka bir isteğiniz var mı?`;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
console.log(chalk.white('\n' + response + '\n'));
|
|
467
|
+
}
|
|
468
|
+
break;
|
|
469
|
+
|
|
470
|
+
case 'model_ayarlari':
|
|
471
|
+
console.log(chalk.cyan('\n⚙️ Model Ayarları'));
|
|
472
|
+
console.log(chalk.grey('─'.repeat(40)));
|
|
473
|
+
|
|
474
|
+
const { modelAction } = await inquirer.prompt([
|
|
475
|
+
{
|
|
476
|
+
type: 'list',
|
|
477
|
+
name: 'modelAction',
|
|
478
|
+
message: 'Model Yönetimi:',
|
|
479
|
+
choices: [
|
|
480
|
+
'🤖 Aktif Model: ' + (config.get('ai.model') || 'GPT-4'),
|
|
481
|
+
'🔑 API Key Değiştir',
|
|
482
|
+
'🌐 Model Sağlayıcı Değiştir (OpenAI/Anthropic/Gemini)',
|
|
483
|
+
'🧪 Bağlantı Testi Yap',
|
|
484
|
+
'🔙 Geri'
|
|
485
|
+
]
|
|
486
|
+
}
|
|
487
|
+
]);
|
|
488
|
+
|
|
489
|
+
if (modelAction.includes('API Key')) {
|
|
490
|
+
const { apiKey } = await inquirer.prompt([
|
|
491
|
+
{ type: 'password', name: 'apiKey', message: 'Yeni API Key:' }
|
|
492
|
+
]);
|
|
493
|
+
config.set('ai.apiKey', apiKey);
|
|
494
|
+
console.log(chalk.green(' ✅ API Key güncellendi!'));
|
|
495
|
+
} else if (modelAction.includes('Model Sağlayıcı')) {
|
|
496
|
+
const { provider } = await inquirer.prompt([
|
|
497
|
+
{
|
|
498
|
+
type: 'list',
|
|
499
|
+
name: 'provider',
|
|
500
|
+
message: 'Sağlayıcı:',
|
|
501
|
+
choices: ['OpenAI (GPT-4)', 'Anthropic (Claude)', 'Google (Gemini)', 'xAI (Grok)']
|
|
502
|
+
}
|
|
503
|
+
]);
|
|
504
|
+
config.set('ai.model', provider);
|
|
505
|
+
console.log(chalk.green(' ✅ Model sağlayıcı değiştirildi!'));
|
|
506
|
+
} else if (modelAction.includes('Bağlantı')) {
|
|
507
|
+
console.log(chalk.yellow(' 🔄 Bağlantı test ediliyor...'));
|
|
508
|
+
console.log(chalk.green(' ✅ Bağlantı başarılı!'));
|
|
509
|
+
}
|
|
510
|
+
break;
|
|
511
|
+
|
|
326
512
|
case 'exit':
|
|
327
513
|
case 'quit':
|
|
328
514
|
console.log(chalk.yellow('\n👋 Vantuz kapatılıyor...'));
|