- Источники: RAG возвращает sources (slug/§/ref), под ответом ссылка «по учебнику
X, §N» на параграф (миграция 064: section_ref в textbook_chunks; headless-индексатор
его заполняет). Статический индексатор теперь не затирает headless-данные.
- Режим-наставник: переключатель Ответ/Подсказка/Проверить решение в «Спроси»
(mode в ask + промпт); на карточке экзамена кнопка «Подсказка» (mode hint).
- Оценка ответов: лайк/дизлайк под ответом (assistant_feedback) + сводка в админке.
- Утренний бриф на дашборде: «занимался N из 5 дн + план на сегодня».
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@@ -900,9 +900,15 @@ function getAssistant(_req, res) {
consts=db.prepare("SELECT COALESCE(SUM(model_calls),0) model_calls, COALESCE(SUM(cache_hits),0) cache_hits, COALESCE(SUM(faq),0) faq FROM assistant_usage WHERE day > date('now','-30 days')").get();
if(s)usage30=s;
}catch(e){}
letfeedback={up:0,down:0,recent:[]};
try{
constf=db.prepare("SELECT COALESCE(SUM(CASE WHEN rating=1 THEN 1 ELSE 0 END),0) up, COALESCE(SUM(CASE WHEN rating=-1 THEN 1 ELSE 0 END),0) down FROM assistant_feedback WHERE created_at > date('now','-30 days')").get();
if(f){feedback.up=f.up;feedback.down=f.down;}
feedback.recent=db.prepare("SELECT q, created_at FROM assistant_feedback WHERE rating=-1 AND q IS NOT NULL AND q <> '' ORDER BY id DESC LIMIT 5").all();
constrows=db.prepare(`SELECT textbook_title, section_title, text FROM textbook_chunks WHERE ${words.map(()=>'text LIKE ?').join(' OR ')} LIMIT 60`).all(...args);
if(!rows.length)return'';
constrows=db.prepare(`SELECT slug, textbook_title, section_title, section_ref, text FROM textbook_chunks WHERE ${words.map(()=>'text LIKE ?').join(' OR ')} LIMIT 60`).all(...args);
sys+=' Пользователь — учитель: помогай и с преподаванием — составить задание или вопросы, план урока, '+
'объяснить, как пользоваться учительскими инструментами (классы, журнал, аналитика, онлайн-урок, банк вопросов).';
}
if(mode==='hint'){
sys+=' РЕЖИМ ПОДСКАЗКИ: дай ТОЛЬКО наводящую подсказку или следующий шаг к решению. Не давай готовый ответ — пусть ученик додумает сам.';
}elseif(mode==='check'){
sys+=' РЕЖИМ ПРОВЕРКИ: ученик прислал своё решение. Скажи, верно оно или нет, и укажи КОНКРЕТНО, где ошибка (если есть). Не выдавай сразу полный правильный ответ — дай шанс исправить.';
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.