feat(assistant): авто-подхват новых модулей по фича-флагам в индексации системы

buildSystemKb теперь добавляет в снимок ЛЮБОЙ фича-флаг, которого нет в
MODULE_CATALOG, как «функция X — вкл/выкл» (assistant-сам пропускается).
Новый модуль с фича-флагом попадает в знания Квантика автоматически после
«Проиндексировать», без правки кода. Для красивого описания/ссылки — запись
в каталоге или поле «Описание системы».

Проверено: авто-подхват 6/6, node --check OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-24 21:30:49 +03:00
parent 08da26afca
commit 36eb0b980b
@@ -1013,6 +1013,12 @@ function buildSystemKb() {
chunks.push({ title: m.name, text: `Модуль «${m.name}» — ${e ? 'ВКЛЮЧЁН и доступен' : 'ВЫКЛЮЧЕН (не предлагать ученику)'}. ${m.desc}${m.url ? ' Раздел: ' + m.url + '.' : ''}` });
});
chunks.push({ title: 'Доступные модули', text: `Сейчас на платформе ВКЛЮЧЕНЫ разделы: ${on.join(', ')}.` + (off.length ? ` ВЫКЛЮЧЕНЫ (о них не рассказывать и не предлагать): ${off.join(', ')}.` : '') });
// авто-подхват НОВЫХ модулей: любой фича-флаг, которого нет в каталоге (assistant — это сам помощник, пропускаем)
const known = new Set(MODULE_CATALOG.map(m => m.key).filter(Boolean));
Object.keys(flags).forEach(k => {
if (known.has(k) || k === 'assistant') return;
chunks.push({ title: 'Функция: ' + k, text: `Функция платформы «${k}» — ${flags[k] !== false ? 'ВКЛЮЧЕНА' : 'ВЫКЛЮЧЕНА (не предлагать)'}.` });
});
const doc = _aset('assistant_system_doc');
if (doc && doc.trim()) doc.split(/\n{2,}/).map(s => s.trim()).filter(Boolean).forEach(p => chunks.push({ title: 'Описание системы', text: p.slice(0, 1500) }));
return chunks;