v2 #10
@@ -244,7 +244,7 @@ const paketOzellikleri = [
|
|||||||
text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
|
text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
|
||||||
},
|
},
|
||||||
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
|
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
|
||||||
{ icon: RefreshCcw, text: "Sınırsız liste revizyonu (danışmanla sohbetten)" },
|
{ icon: RefreshCcw, text: "Liste revizyonu sayısı sınırsız (sohbetten; her istek 1 sohbet kredisi)" },
|
||||||
{
|
{
|
||||||
icon: MessageCircleQuestion,
|
icon: MessageCircleQuestion,
|
||||||
text: `${URUNLER.paket.credits} yapay zekâ danışman sorusu`,
|
text: `${URUNLER.paket.credits} yapay zekâ danışman sorusu`,
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ const OZELLIKLER = [
|
|||||||
text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
|
text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
|
||||||
},
|
},
|
||||||
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
|
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
|
||||||
{ icon: RefreshCcw, text: "Sınırsız liste revizyonu (danışmanla sohbetten)" },
|
{ icon: RefreshCcw, text: "Liste revizyonu sayısı sınırsız (sohbetten; her istek 1 sohbet kredisi)" },
|
||||||
{
|
{
|
||||||
icon: MessageCircleQuestion,
|
icon: MessageCircleQuestion,
|
||||||
text: `${URUNLER.paket.credits} Yapay Zeka danışman sorusu (her mesaj 1 kredi)`,
|
text: `${URUNLER.paket.credits} Yapay Zeka danışman sorusu (her mesaj 1 kredi)`,
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ function hataMesaji(err: unknown): string {
|
|||||||
err instanceof Error &&
|
err instanceof Error &&
|
||||||
/abort|timeout|timed out/i.test(`${err.name} ${err.constructor.name} ${err.message}`)
|
/abort|timeout|timed out/i.test(`${err.name} ${err.constructor.name} ${err.message}`)
|
||||||
) {
|
) {
|
||||||
return "Liste üretimi bu sefer çok uzun sürdü ve durduruldu; kredin/paketin etkilenmedi.";
|
return "Liste üretimi bu sefer çok uzun sürdü ve durduruldu; revizyon bedeli alınmadı (bu mesajın 1 sohbet kredisi düştü).";
|
||||||
}
|
}
|
||||||
console.error("[revizyon] üretim hatası:", err instanceof Error ? err.message : String(err));
|
console.error("[revizyon] üretim hatası:", err instanceof Error ? err.message : String(err));
|
||||||
return "Liste yeniden kurulurken bir sorun oluştu; kredin/paketin etkilenmedi.";
|
return "Liste yeniden kurulurken bir sorun oluştu; revizyon bedeli alınmadı (bu mesajın 1 sohbet kredisi düştü).";
|
||||||
}
|
}
|
||||||
|
|
||||||
function ozetCikar(rapor: RaporSonuc): Extract<RevizyonOzeti, { ok: true }> {
|
function ozetCikar(rapor: RaporSonuc): Extract<RevizyonOzeti, { ok: true }> {
|
||||||
|
|||||||
@@ -709,7 +709,7 @@ export async function raporUretAyrintili(
|
|||||||
)}`,
|
)}`,
|
||||||
);
|
);
|
||||||
throw new RaporUretimHatasi(
|
throw new RaporUretimHatasi(
|
||||||
"Rapor üretilemedi (doğrulama iki denemede de başarısız). Tekrar dener misin? Revizyon hakkın kullanılmadı.",
|
"Rapor üretilemedi (doğrulama iki denemede de başarısız). Tekrar dener misin?",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// İlk üretimde zaman aşımı (bkz. ZAMAN_ASIMINDA_KODLA_KUR): liste tamamen
|
// İlk üretimde zaman aşımı (bkz. ZAMAN_ASIMINDA_KODLA_KUR): liste tamamen
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ export function danismanAkisi(opts: {
|
|||||||
}
|
}
|
||||||
if (tampon) {
|
if (tampon) {
|
||||||
baglantiDuzeltme += tampon.duzeltmeler.length;
|
baglantiDuzeltme += tampon.duzeltmeler.length;
|
||||||
for (const d of tampon.duzeltmeler) duzeltilenSluglar.push(d.yeniSlug ? `${d.slug}→${d.yeniSlug}` : `${d.slug}→(düz)`);
|
for (const d of tampon.duzeltmeler) duzeltilenSluglar.push(d.yeniSlug ? `→${d.yeniSlug}` : "→(düz)");
|
||||||
tampon = null;
|
tampon = null;
|
||||||
}
|
}
|
||||||
} else if (parca.type === "error") {
|
} else if (parca.type === "error") {
|
||||||
@@ -277,7 +277,8 @@ export function danismanAkisi(opts: {
|
|||||||
const semaSizintisi = semaSizintisiVar(metin, ARAC_ADLARI);
|
const semaSizintisi = semaSizintisiVar(metin, ARAC_ADLARI);
|
||||||
if (semaSizintisi) console.warn("[soru] olası iç şema sızıntısı: cevapta araç adları / şema anahtarları var");
|
if (semaSizintisi) console.warn("[soru] olası iç şema sızıntısı: cevapta araç adları / şema anahtarları var");
|
||||||
if (reddedilenArac) console.info("[soru] araç sınırı:", reddedilenArac, "çağrı çalıştırılmadı");
|
if (reddedilenArac) console.info("[soru] araç sınırı:", reddedilenArac, "çağrı çalıştırılmadı");
|
||||||
// Slug kişisel veri değildir; hangi uydurma adresin neye döndüğü loglanır
|
// Yalnız sayaç + kayıtlı (gerçek) slug loglanır; modelin yazdığı ham slug
|
||||||
|
// kullanıcı metninden gelebileceği için log'a geçmez (güvenlik-uyum, 7 Eki 2026).
|
||||||
if (baglantiDuzeltme) console.info("[soru] rehber bağlantısı düzeltildi:", baglantiDuzeltme, duzeltilenSluglar.join(", "));
|
if (baglantiDuzeltme) console.info("[soru] rehber bağlantısı düzeltildi:", baglantiDuzeltme, duzeltilenSluglar.join(", "));
|
||||||
opts.onDenetim?.({ jevP, vaatRegex, vaatNotu, reddedilenArac, kayitNotu, revizeNotu, semaSizintisi, baglantiDuzeltme });
|
opts.onDenetim?.({ jevP, vaatRegex, vaatNotu, reddedilenArac, kayitNotu, revizeNotu, semaSizintisi, baglantiDuzeltme });
|
||||||
await opts.onTamam(metin);
|
await opts.onTamam(metin);
|
||||||
|
|||||||
Reference in New Issue
Block a user