fix(zeroNotes): гейт от обрезанного ответа AI (пустой/оборванный текст улетал в паблик)

This commit is contained in:
Alexey Pavlov
2026-09-18 13:16:17 +03:00
parent bf60d458da
commit 80521bae92
+13
View File
@@ -171,6 +171,19 @@ async function generateDraft(channelId, opts = {}) {
.replace(/\s*```\s*$/i, '') .replace(/\s*```\s*$/i, '')
.trim(); .trim();
// 5b. Защита от обрезанного ответа AI-шлюза: гейт возвращал коротким текстом
// без ошибки (например "Когда-то я дума"), и это тихо улетало в паблик.
// Считаем валидной заметку не короче 120 символов и заканчивающуюся на
// знак препинания/эмодзи (не оборванную на полуслове).
const MIN_NOTE_LEN = 120;
const endsCleanly = /[.!?…"»)\p{Emoji_Presentation}]\s*$/u.test(content);
if (content.length < MIN_NOTE_LEN || !endsCleanly) {
throw new Error(
`AI вернул обрезанный/подозрительно короткий текст (${content.length} симв., ` +
`конец="${content.slice(-20)}"). Черновик НЕ сохранён, генерацию нужно перезапустить.`
);
}
// 6. Подбираем позу Зеро по тексту // 6. Подбираем позу Зеро по тексту
const pose = zeroChar.pickPose({ const pose = zeroChar.pickPose({
title: prompt.themeHint, title: prompt.themeHint,