feat(assistant): авто-переиндексация системы при смене флагов + пометка «без описания»

- updateFeatures вызывает _autoReindexSystem(): при тоггле любого модуля снимок
  знаний о системе обновляется сам (только если уже индексировали — не создаёт
  KB на пустом месте). Кнопку жать больше не нужно после смены флагов.
- getAssistant отдаёт systemUndoc — модули с фича-флагом, но без записи в
  каталоге; админ-карточка показывает «Без описания: …» (пассивная подсказка,
  без пушей), чтобы при желании дополнить «Описание системы».

Проверено: авто-реиндекс (не создаёт пустой / обновляет существующий) + undoc 3/3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-24 21:34:43 +03:00
parent 36eb0b980b
commit 1915026bff
2 changed files with 22 additions and 1 deletions
@@ -556,6 +556,7 @@ function updateFeatures(req, res) {
invalidateGamificationCache();
} catch { /* defensive — shouldn't fail */ }
}
_autoReindexSystem(); // снимок «знаний о системе» подстраивается под новые флаги (если уже индексировали)
res.json({ ok: true });
}
@@ -1024,6 +1025,22 @@ function buildSystemKb() {
return chunks;
}
// Тихая авто-переиндексация (вызывается при смене фича-флагов). Не создаёт KB,
// если админ ещё ни разу не индексировал — только обновляет существующий снимок.
function _autoReindexSystem() {
try {
if (!_aset('assistant_system_kb')) return;
db.prepare("INSERT OR REPLACE INTO app_settings (key, value) VALUES ('assistant_system_kb', ?)").run(JSON.stringify(buildSystemKb()));
db.prepare("INSERT OR REPLACE INTO app_settings (key, value) VALUES ('assistant_system_kb_at', ?)").run(new Date().toISOString());
} catch (e) {}
}
// Модули с фича-флагом, но без записи в каталоге (нет «красивого» описания) — подсказка админу.
function _undocumentedModules() {
try { const known = new Set(MODULE_CATALOG.map(m => m.key).filter(Boolean)); return Object.keys(_featFlags()).filter(k => !known.has(k) && k !== 'assistant'); }
catch (e) { return []; }
}
/* POST /api/admin/assistant/index-system — пересобрать знания о системе */
function indexSystem(req, res) {
try {
@@ -1077,6 +1094,7 @@ function getAssistant(_req, res) {
systemDoc: _aset('assistant_system_doc') || '',
systemKbCount: (() => { try { return (JSON.parse(_aset('assistant_system_kb') || '[]') || []).length; } catch (e) { return 0; } })(),
systemKbAt: _aset('assistant_system_kb_at') || null,
systemUndoc: _undocumentedModules(),
chunks, usage, usage30, feedback, failover, presets: ASSISTANT_PRESETS,
kiloModels: _kiloModels(), kiloModelsCustom: !!_aset('assistant_kilo_models'),
});