feat(assistant): Квантик-ассистент — Ф0/Ф1 + «Спроси» (правиловый движок)

Плавающий помощник на всех страницах (через sidebar.js + inject в учебник):
контекстные подсказки по странице, проактивные напоминания из реальных данных
(домашка с дедлайном, карточки к повторению, серия под угрозой, квест дня),
поздравления (левелап/серия) и панель «Спроси Квантика» (поиск по FAQ + точка
расширения под локальную модель). Консервативно: дневной лимит, кулдауны,
«не показывать», выключатель в профиле. Лицо — pet-sprite, данные — /api/pet.

Бэкенд: миграция 062 (assistant_enabled + assistant_seen, cross-device «видел»),
GET /api/assistant/context, POST seen/dismiss/ask, PATCH settings — гейт фичи 'pet'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-04 16:17:37 +03:00
parent 26c0ac0e58
commit 3f8009c59d
8 changed files with 599 additions and 0 deletions
+2
View File
@@ -183,6 +183,7 @@ app.use('/api/classroom', classroomRoutes);
app.use('/api/games', gamesRoutes);
app.use('/api/knowledge-map', requireFeature('knowledge_map'), knowledgeMapRoutes);
app.use('/api/pet', requireFeature('pet'), petRoutes);
app.use('/api/assistant', requireFeature('pet'), require('./routes/assistant'));
app.use('/api/collection', requireFeature('collection'), collectionRoutes);
app.use('/api/red-book', requireFeature('red_book'), redBookRoutes);
app.use('/api/biochem', requireFeature('biochem'), require('./routes/biochem'));
@@ -430,6 +431,7 @@ const DEEPLINK_INJECT = `
<script defer src="/js/textbook-deeplink.js"></script>
<script defer src="/js/material-save.js"></script>
<script defer src="/js/textbook-clip.js"></script>
<script defer src="/js/assistant.js"></script>
`;
function _renderTextbook(filePath, slug, embed) {