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:
@@ -1050,6 +1050,7 @@ window.LS = {
|
||||
crAdminGetAllHistory, crAdminGetTeachersList,
|
||||
listMaterials, saveMaterial, updateMaterial, deleteMaterial, shareMaterial, getActivity,
|
||||
createMaterialCollection, updateMaterialCollection, deleteMaterialCollection,
|
||||
assistantContext, assistantSeen, assistantDismiss, assistantSettings, assistantAsk,
|
||||
fcListDecks, fcCreateDeck, fcAddCard,
|
||||
escapeHtml, esc,
|
||||
parseDate, fmtRelTime, safeHref,
|
||||
@@ -1267,6 +1268,11 @@ async function getActivity() { return req('GET', '/dashboard/activit
|
||||
async function createMaterialCollection(d) { return req('POST', '/materials/collections', d); }
|
||||
async function updateMaterialCollection(id,d){ return req('PATCH', `/materials/collections/${id}`, d); }
|
||||
async function deleteMaterialCollection(id) { return req('DELETE', `/materials/collections/${id}`); }
|
||||
async function assistantContext() { return req('GET', '/assistant/context'); }
|
||||
async function assistantSeen(ruleId) { return req('POST', '/assistant/seen', { ruleId }); }
|
||||
async function assistantDismiss(rid) { return req('POST', '/assistant/dismiss', { ruleId: rid }); }
|
||||
async function assistantSettings(d) { return req('PATCH', '/assistant/settings', d); }
|
||||
async function assistantAsk(q) { return req('POST', '/assistant/ask', { q }); }
|
||||
async function fcListDecks() { return req('GET', '/flashcards/decks'); }
|
||||
async function fcCreateDeck(d) { return req('POST', '/flashcards/decks', d); }
|
||||
async function fcAddCard(deckId, d) { return req('POST', `/flashcards/decks/${deckId}/cards`, d); }
|
||||
|
||||
@@ -235,4 +235,13 @@
|
||||
s.defer = true;
|
||||
document.body.appendChild(s);
|
||||
}
|
||||
|
||||
// Квантик-ассистент — плавающий помощник на всех страницах с шапкой
|
||||
if (typeof LS !== 'undefined' && LS.isLoggedIn?.() && !document.getElementById('asst-loader')) {
|
||||
const s = document.createElement('script');
|
||||
s.id = 'asst-loader';
|
||||
s.src = '/js/assistant.js';
|
||||
s.defer = true;
|
||||
document.body.appendChild(s);
|
||||
}
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user